当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    PHP程序员玩转Linux系列 备份还原MySQL

    栏目:win服务器问题汇总 时间:2019-12-11 15:12

    PHP程序员玩转Linux系列文章:

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS

    2.PHP程序员玩转Linux系列-lnmp环境的搭建

    3.PHP程序员玩转Linux系列-搭建FTP代码开发环境

    前几天有个新闻,说是gitlab的工程师把数据文件给误删了,搞了个大事件,很多人都去围观了.备份工作应该在最开始的时候就要做,否则就会失去最佳时机,为了保证我的数据是安全的,因此我要搞备份了.备份分为逻辑备份和物理备份,逻辑备份是导sql,物理备份是基于文件的,这两种我都搞一下.

    开启binlog

    首先第一件事是打开binlog日志,编辑mysql配置文件开启一下,默认是关闭的.编辑 /etc/my.cnf ,log-bin=mysqlbinlog =号后面的是binlog日志的名字,默认生成在数据目录里面,重启一下mysql服务 , service mysqld restart

    查看mysql的数据目录 , /var/lib/mysql ,mysqlbinlog.000001等文件就是binlog日志文件.

    添加一些测试数据

    建数据库,建表和插入一些记录,用于测试,表的存储引擎选择innodb,因为这个引擎容易测出来问题

    #建库
    create database entmail charset=utf8; 
    #建表,存储引擎选用innodb
    create table user( id int auto_increment primary key, name varchar(100) not null default '' ) engine=innodb;
    #插记录
    insert into user values(null,'shihan');
    insert into user values(null,'shihan1');
    insert into user values(null,'shihan2');
    insert into user values(null,'shihan3');

    小数据量使用mysqldump逻辑备份

    第一想到的备份方式是使用mysqldump,导出sql语句,恢复的时候就再次导入sql语句.

    针对我的数据库,用户名root 密码空,我放sql文件的位置是/home/shihan1/mysql/sqls/ ,备份所有数据库,我的导出命令是下面这句

    复制代码 代码如下:mysqldump -uroot --all-databases > /home/shihan1/mysql/sqls/all.sql

    此时,我误删了数据库entmail , drop database entmail

    不着急,马上进行恢复,执行以下导入命令,数据库立刻就回来了,注意一个是mysqldump命令,一个是mysql命令

    复制代码 代码如下:mysql -uroot < /home/shihan1/mysql/sqls/all.sql

    为啥不能用拷贝数据目录的方式备份

    有的同学会使用直接拷贝数据目录的方式备份,我也测试了一下,实际证明这种方式是不正确的.我用tar命令把数据目录整个打包搬走,然后删除整个数据目录,再搬回来.

    因为我把mysql的那几张用户表啥的都删了,mysql会进行重新初始化

    我把数据文件再搬回来,然后进mysql看看,结果是这样的,告诉我user表不存在了,这张表是innodb引擎的,所以不能使用这种方式,幸亏我有前面的逻辑备份,从新导一下,数据又回来了.

    复制代码 代码如下:mysql -uroot < /home/shihan1/mysql/sqls/all.sql

    使用第三方软件percona-xtrabackup实现物理备份

    可以实现物理备份的软件与很多,mysql也有企业版备份工具,但是貌似是收费的,percona-xtrabackup这个开源软件可以很好的实现全量备份和增量备份.