DB2数据库备份转成MySQL_MySQL备份与恢复整理[转]

一、MySQL的逻辑备份是将数据库备份成一个文件,这样有利于查看与编辑。在MySQLk ,使用mysqldump工具来完成逻辑备份;

1、备份指定的库,或者此库中的表;

mysqldump [options]db_name [tables]

2、备份指定的一个库或者多个库;

mysqldump [options] --database DB1[DB2 DB3......]

3、备份所有数据库;

mysqldump [options] --all-database

举例如下;

1、备份所有数据库:

mysqldump -uroot -p --all-database > all.sql

2、备份product数据库;

mysqldump -uroot -p product > product.sql

3、备份product数据库下的code表;

mysqldump -uroot -p product code > code.sql

4、备份product数据库下的code表和list表;

mysqldump -uroot -p product code list > code_list.sql

......

二、完全恢复;

1、恢复数据库;

mysql -uroot -p dbname < bakfile

2、重做备份日志;

mysqlbinlog binlog-file | mysql -u root -p

完整举例如下;

1、第一天,备份数据库;

mysqldump -uroot -p -l -F product >product.sql

-l:给所有表加读锁,-F:生成一个新的日志文件。

2、第二天,插入一部分新数据;

3、第三天,数据库突然挂了,数据无法访问,需要恢复备份;

mysql -uroot -p product < product.sql

4、恢复完成后得到的是第一天备份时的数据,此时需要使用mysqldump恢复自mysqldump备份后的binlog:

mysqlbinlog localhost-bin.000012 | mysql -uroot -p product

三、基于时间点还原;

1、如果第三天9点发生误操作,可以用如下语句从备份和binlog将数据恢复到故障前:

mysqlbinlog --stop-date="2010-09-17 8:59:59" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd

2、跳过故障点继续恢复;

mysqlbinlog --start-date="2010-09-17 9:01:00" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd

四、基于位置恢复;

和基于时间点的恢复相类似,但更精确,同一时间点可能有多条SQL语句同时执行,恢复的操作步骤如下;

1、在shell下执行如下命令;

mysqlbinlog --start-date="2010-09-17 8:55:00" --stop-date="2010-09-17 9:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

此时在tmp下建立了小的文本文件,编辑它并找出错语句前后的位置号,例如前后号分别为:198765和198869;

2、恢复了以前的备份文件后,接着执行如下命令;

mysqlbinlog --stop-position="198765" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd

mysqlbinlog --start-position="198769" /var/log/mysql/bin.123456 | mysql -uroot -pmypwd

第一行:恢复到停止位置的所有事务;

第二行:将恢复从给定的起始位置直到二进制日志结束的所有事务;

***************************************************************************************************************

物理备份和恢复;

物理备份比逻辑备份速度更快,物理备份分为:

1、冷备份:停下MySQL服务,cp数据,恢复时停止MySQL,先进行操作系统级别恢复数据文件,然后重启MySQL服务,使用mysqlbinlog工具恢复自备份以来的所有binlog.

2、热备份:对于不同的存储引擎方法也不同;

A、MyISAM存储引擎,本质就是将要备份的表加读锁,然后再cp数据文件到备份目录。方法如下两种;

方法1、使用mysqlhotcopy工具;

mysqlhotcopy工具是mysql自带的热备份工具,使用方法如下;

mysqlhotcopy db_name [/path/to/new_directory]

方法2、手工锁表copy;

mysql>flush tables for read;

然后cp数据文件到备份目录下;

B、InnoDB存储引擎;

ibbackup工具可以热备份InnoDB存储引擎类数据库,但有一点它是收费的,此处不研究。

要清二进制日志的话,在mysql开启了二进制日志的状态下,以root身份登录mysql以后执行下面两个命令之一:

PURGE MASTER LOGS before '2020-1-1';        清除指定日期之前的二进制日志

PURGE MASTER LOGS TO 'mysql-bin.010';        清除指定文件编号之前的二进制日志

注意,如果没运行命令而是直接删除mysql-bin.xxx文件的话,mysql-bin.index里仍然记录了日志文件列表,这样以后再清日志时,就会因找不到列表中的日志文件而无法清理mysql日志

可以用bin目录中的mysqlbinlog.exe查看mysql二进制日志。

mysqlbinlog mysql-bin.000001

如果my.cnf中设置了字符集的话,可能会出现这以下这样的报错

mysqlbinlog: unknown variable 'default-character-set=utf8'

带上--no-defaults参数后即可解决

mysqlbinlog --no-defaults mysql-bin.000001

如果是要清理*.err日志的话,直接停止mysql数据库,将这个文件剪切走或者删除,重启mysql生成一个新的即可。

.err文件中实际是以文本方式保存的错误提示,可以直接用记事本打开查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值