脚踏实地、勇往直前!
全部博文(1005)
分类: Mysql/postgreSQL
2014-10-22 11:28:01
1.备份数据库
首先锁表进行备份,防止其他会话操作数据库
mysql>flush tables with read lock;
拷贝数据文件到备份目录
$cp -a /db/mysql/dbdata/hxl_myisam /dbext/mysql/bak/hxl_myisam_20141022
刷新日志
mysql>flush logs;
这个时候数据库使用的binlog日志
mysql -h node2 -uroot -p -e "show master status" --vertical>/dbext/mysql/bak/master.info
[mysql@node2 bak]$ more master.info
*************************** 1. row ***************************
File: mysql-bin.000119
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
解锁
mysql>unlock tables;
2.模拟删除其中一个表
这个时候对数据库进行了相应的操作(比如创建表,删除数据),其中一个步骤是删除了一个表
mysql>DROP table tb_dic_class_myisam_10
3.停掉数据库,将备份还原
停止数据库
$mysqladmin -h node2 -uroot -p shutdown
备份当前的数据库目录
$mv /db/mysql/dbdata/hxl_myisam /db/mysql/dbdata/hxl_myisam.tmp
将之前备份的还原回来
$cp -a /dbext/mysql/bak/hxl_myisam_20141022 /db/mysql/dbdata/hxl_myisam
4.启动mysql
编辑my.cnf文件,在[mysqld]栏目下添加如下参数关闭TCP/IP数据库连接,这里中只允许本机通过socket连接
skip-networking
然后启动数据库
$mysqld_safe --defaults-file=/db/mysql/config/my.cnf
尝试采用scoket连接数据库
$mysql -u root -p -S /db/mysql/dbdata/mysql.sock
5.找到需要重放和滤过的语句
[mysql@node2 binlog]$ mysqlbinlog --database=hxl_myisam /db/mysql/mysqllog/binlog/mysql-bin.000119|grep -B 3 -i "drop table"
# at 2856
#141022 10:44:13 server id 1 end_log_pos 3003 CRC32 0xe93d57cc Query thread_id=63 exec_time=0 error_code=0
SET TIMESTAMP=1413945853/*!*/;
DROP TABLE `tb_dic_class_myisam_10` /* generated by server */
我们需要略过的语句在 2856 位置上,紧接着是 3003 位置上,我们可以把日志从开始重放到 2856 位置,然后再从 3003 开始到最后.
mysqlbinlog --database=hxl_myisam /db/mysql/mysqllog/binlog/mysql-bin.000119 --stop-position=2856|mysql -u root -p -S /db/mysql/dbdata/mysql.sock
mysqlbinlog --database=hxl_myisam /db/mysql/mysqllog/binlog/mysql-bin.000119 --start-position=3003|mysql -u root -p -S /db/mysql/dbdata/mysql.sock
6.验证数据
7.修改my.cnf文件
将之前修改的my.cnf文件修改回来,然后重新启动mysql
-- The End --