MySQL从库损坏后重建
MySQL的从库由于意外原因导致和主库不能同步,需要重新建立从库。
因为发生了异常,从库目录下生成了 几十万 个的 localhost-relay-bin.xxxx 文件, 到了从库的mysql目录下,一个不小心 ls 或 tab 键 机器就假死,失去反应。
首先清除从库数据库目录下的 几十万 个的 localhost-relay-bin.xxxx 文件。
在目录下执行
-
rm *relay-bin.*
命令执行失败。
通过一番尝试,使用如下命令删除,删除了很久(快一个小时)
-
find . -name "*relay-bin.*" -exec rm {} \;
因为已经有原先同步过的许多数据,很多表的数据没有变化。准备采用rsync/scp方式将主库的文件拷贝过去。
步骤:
1.首先在主库上执行
-
FLUSH TABLES WITH READ LOCK;
-
SHOW MASTER STATUS;
记录下信息。
注: 如果文件比较多,要拷贝很长时间,最好是在SHOW MASTER STATUS 后另开一个ssh窗口,将mysqld服务停止,等拷贝完以后再开启。
2.在从库机器上,停止从库,执行rsync拷贝文件命令
-
#同一台机器上做拷贝备份
-
#cp -rpv /var/lib/mysql/ /backup/20080512/
-
#scp -rpv masterip:/var/lib/mysql/* /var/lib/mysql/
-
-
#不同机器做压缩拷贝同步更新,
-
rsync -avuzr -e ssh mainserverip:/var/lib/mysql/ /var/lib/mysql/
3. 在主库上执行
-
UNLOCK TABLES;
释放对主库的全局锁,恢复主库的正常使用。
4.修改从库中连接主库的信息
首先修改参数,设置为启动服务时不启动slave进程。修改my.cnf配置,在 [mysqld] 段添加开关
skip-slave-start
运行从库数据库,使用账号登陆到mysql,使用前面步骤 1 记录下来的信息修改从库连接主库的设置。
-
CHANGE MASTER TO MASTER_HOST='hostip', MASTER_PORT=3309,MASTER_USER='slave', MASTER_PASSWORD='slave',MASTER_LOG_FILE='local-bin.00012',MASTER_LOG_POS=32432
SQL命令中不要忘记对地址,账号,密码和文件名参数的值加引号。
开始从库进程
-
START SLAVE;
使用
-
SHOW SLAVE STATUS\G;
查看slave进程的状态。如果在做库文件拷贝的时候没有锁好库,会看到slave sql thread 有执行错。
碰到
Error: Got error 134 from storage engine
的可以通过
-
REPAIR TABLE tbName
来修复,还有一些可以通过
-
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
-
SLAVE START;
可以简单跳过错误处理。如果错误厉害一点的,这么处理不行,那就重新来过吧。
修改配置文件 my.cnf 将前面的开关复位 skip-slave-start 注释掉,在下次机器重新启动时自动开始 slave 进程。
对于inodb数据库需要使用sqldump的方式做数据的导出和再导入
可以在这个地址申请下载 ibbackup 的30天试用版,并配合 innobackup-1.5.0 备份脚本 来做热备份。
Popularity: 4% [?]
Related
Comments
One Response to “MySQL从库损坏后重建”
[...] MySQL从库损坏后重建,顺便将MySQL的从库配置维护温习了一下。 [...]