Dec
27
昨天做数据库同步的时候,本来想用日志更新的方式做的,后来发现--log-update选项在my.cnf文件里面加入后,不能生效。
到http://dev.mysql.com/doc/找5.0的文档看了一下,发现mysql5.0的更新树里面有这样一段话:
也就是说,mysql5.0下面已经用--log-bin代替了--log-update,并且my.cnf文件里面如果已经有log-bin定义的话,就会忽略log-update。难怪昨天的操作会不行。
找到问题,下一步就要去找解决的方法。
1、启动mysql的log-bin记录
方法昨天已经做过,就是修改主机上的my.cnf文件,它在FreeBSD系统的路径上一般是/var/db/mysql或/etc目录。
增加log-bin=/路径/文件名;
保存后,使用下面的命令激活log-bin服务。
如果系统没有使用动态参数文件my.cnf,则可以在启动服务的/usr/local/bin/mysqld_safe参数后面增加--log-bin=/路径/文件名,达到同样的效果。
2、把需要使用到的日志记录文件拷贝到备机上。假设我放到/root/mysql目录,文件名是mysql.bin.000001等。
3、使用mysqlbinlog命令恢复日志
※附录
1、关于mysqlbinlog在mysql 5.0上的使用方法,可以参考:官方资料
2、如果不知道log-bin存放的文件位置,可以使用下面的命令查看:
3、当只是需要恢复部分记录的时候,你可以使用时间点或位置点来定位,例如:
意思是恢复4月20日早上9点到10点这一段时间的数据。
意思是重做368301到368312位置点之间的操作。(位置点可以就是用mysqlbinlog看到的at xxx节点)
同样的,如果我们只是想查看某段时间的操作,直接把它导到一个文件即可。
4、mysql不会自动清除日志,可以使用它自带的mysql-log-rotate 脚本或手动编写脚本清除旧日志。
到http://dev.mysql.com/doc/找5.0的文档看了一下,发现mysql5.0的更新树里面有这样一段话:
引用
Removed the update log. It is fully replaced by the binary log. If the MySQL server is started with --log-update, it is translated to --log-bin (or ignored if the server is explicitly started with --log-bin), and a warning message is written to the error log. Setting SQL_LOG_UPDATE silently sets SQL_LOG_BIN instead (or do nothing if the server is explicitly started with --log-bin).
也就是说,mysql5.0下面已经用--log-bin代替了--log-update,并且my.cnf文件里面如果已经有log-bin定义的话,就会忽略log-update。难怪昨天的操作会不行。
找到问题,下一步就要去找解决的方法。
1、启动mysql的log-bin记录
方法昨天已经做过,就是修改主机上的my.cnf文件,它在FreeBSD系统的路径上一般是/var/db/mysql或/etc目录。
增加log-bin=/路径/文件名;
保存后,使用下面的命令激活log-bin服务。
# mysqladmin -uroot -ppassword flush-logs
如果系统没有使用动态参数文件my.cnf,则可以在启动服务的/usr/local/bin/mysqld_safe参数后面增加--log-bin=/路径/文件名,达到同样的效果。
2、把需要使用到的日志记录文件拷贝到备机上。假设我放到/root/mysql目录,文件名是mysql.bin.000001等。
3、使用mysqlbinlog命令恢复日志
# mysqlbinlog -d test /root/mysql/mysql-bin.000001|mysql -uroot -ppassword
※附录
1、关于mysqlbinlog在mysql 5.0上的使用方法,可以参考:官方资料
2、如果不知道log-bin存放的文件位置,可以使用下面的命令查看:
mysql -uroot -ppassword -e 'SHOW BINLOG EVENTS \G'
3、当只是需要恢复部分记录的时候,你可以使用时间点或位置点来定位,例如:
mysqlbinlog --start-date="2005-04-20 9:01:00" --stop-date="2005-04-20 10:00:01" /var/log/mysql/bin.123456|mysql -uroot -ppassword
意思是恢复4月20日早上9点到10点这一段时间的数据。
mysqlbinlog --start-position="368301" --stop-position="368312"/var/log/mysql/bin.123456| mysql -uroot -pmypwd
意思是重做368301到368312位置点之间的操作。(位置点可以就是用mysqlbinlog看到的at xxx节点)
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00"
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
同样的,如果我们只是想查看某段时间的操作,直接把它导到一个文件即可。
4、mysql不会自动清除日志,可以使用它自带的mysql-log-rotate 脚本或手动编写脚本清除旧日志。