设为首页 加入收藏

TOP

mysqldump 逻辑备份的正确方法(二)
2015-11-12 21:29:16 来源: 作者: 【 】 浏览:10
Tags:mysqldump 逻辑 备份 正确 方法
的日志都存储到其它位置。


然后执行:purge binary logs to 'mysql-bin.000027' 更新了 mysql-bin.index 中的索引信息,这里并没有删除binary log,因为它们已经被mv走了


3)下面模拟一个 增量备份:


这里 flush logs 进行增量备份,然后将增量备份的 bianry log 文件 mysql-bin.000027 也存储起来。


然后在进行一条 delete 语句:


到这里数据库的最新状态是:user 表只有3条记录。


然后我们同样将 mysql-bin.000028 也存储起来。


4)然后我们删除 data-dir 目录中的所有文件,然后开始还原:


此时 data-dir 目录是空的。然后我们试图使用 mysqladmin -uroot -p shutdown 来关闭mysqld,发现早不到 mysql.sock 无法关闭,我们只好使用


killall mysqld


来关闭。


5)然后进行数据库的初始化,然后开始还原


进入到 /usr/local/mysql/script 目录,然后执行初始化:


./mysql_install_db? --user=mysql --datadir=/var/lib/mysql --basedir=/usr/local/mysql


初始化成功之后,执行:


/usr/local/mysql/bin/mysql_secure_installation


来进行密码设置。这一步可能会报错:找不到 /tmp/mysql.sock 文,解决方法,在/etc/my.cnf 中的[client], [mysql], [mysqld] 都进行下面的设置:


socket=/tmp/mysql.sock


然后重新执行:/usr/local/mysql/bin/mysql_secure_installation 就行了。


初始化完成之后,我们使用备份的sql脚本来进行恢复:


执行完成之后,发现 gs 和 ngx_lua 数据库都还原出来了,但是他们的数据不是最新的数据:


这是因为,我们还没有使用 mysql-bin.000027 和 mysql-bin.000028 两个binary log。mysql-bin.000027 是我们前面模拟的增量备份,而mysql-bin.000028 是 删除data-dir目录时,最新的binary log。依次应用了这两个binary log之后,数据库才能恢复到最新的状态。


6)应用 binary log:


mysqlbinlog mysql-bin.000027 > 27.sql 得到了 27.sql 和 28.sql 之后,使用 mysql 来执行:


mysql -uroot -p < 27.sql; 应用了增量备份的binary log.


然后查看数据:


然应用 28.sql :


mysql -uroot -p < 28.sql;


得到最新的状态:


可以看到,成功的还原到了删除 data-dir 目录之前的状态了。


5. mysqldump的 坑


如果对 mysqldump 的默认启用的选项不熟悉的话,可能会被默认启用的选项 --add-drop-table 给坑了。因为默认会生成 drop table if exist 语句。可能会导致数据的丢失。? --add-drop-database 默认没有启用。如果不想他生成 drop table 语句,可以加入 --skip-add-drop-table选项,或者 --add-ropt-table=0也可以。


6. 总结:


1)逻辑备份的最佳方法:


全备:


mysqldump -uxxx -p --single-transaction --master-data=2 --routines --flush-logs --databases db1 db2 db3 > alldb.sql;


mysqldump -uxxx -p --flush-privileges --databases mysql > mysql.sql;


如果将mysql也一起备份的话:


mysqldump -uxxx -p --single-transaction --master-data=2 --routines --flush-logs --flush-privileges --all-databases > alldb.sql;


有时,还需要加入:--default-character-set=utf8/utf8mb4 ,该选项一般也可以配置在/etc/my.cnf中。


增量备份:flush logs; 然后将binary log存储起来即可。


2)搭建slave时的最佳选项:


mysqldump -uxxx -p --single-transaction --master-data=2 --routines --databases db1 db2 db3 > alldb.sql;


搭建slave,没有必要 --flush-logs。当然搭建slave的最佳方式是使用 xtrabackup,物理备份。


3)使用mysqldump备份的sql脚本还原的方法:


先还原数据库,然后应用增量日志和最新日志,binary log在应用之前需要使用mysqlbinlog命令来处理。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL 命令行工具之 mysqldump 深.. 下一篇DBCA出错:ORA-19809: limit exce..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: