MySQL从库损坏后重建

MySQL的从库由于意外原因导致和主库不能同步,需要重新建立从库。

因为发生了异常,从库目录下生成了 几十万 个的 localhost-relay-bin.xxxx 文件, 到了从库的mysql目录下,一个不小心 ls 或 tab 键 机器就假死,失去反应。

首先清除从库数据库目录下的 几十万 个的 localhost-relay-bin.xxxx 文件。
在目录下执行

  1. rm *relay-bin.*

命令执行失败。
通过一番尝试,使用如下命令删除,删除了很久(快一个小时)

  1. find . -name "*relay-bin.*" -exec rm {} \;

因为已经有原先同步过的许多数据,很多表的数据没有变化。准备采用rsync/scp方式将主库的文件拷贝过去。

步骤:
1.首先在主库上执行

  1. FLUSH TABLES WITH READ LOCK;
  2. SHOW MASTER STATUS;

记录下信息。
注: 如果文件比较多,要拷贝很长时间,最好是在SHOW MASTER STATUS 后另开一个ssh窗口,将mysqld服务停止,等拷贝完以后再开启。

2.在从库机器上,停止从库,执行rsync拷贝文件命令

  1. #同一台机器上做拷贝备份
  2. #cp -rpv /var/lib/mysql/  /backup/20080512/
  3. #scp -rpv masterip:/var/lib/mysql/*  /var/lib/mysql/
  4.  
  5. #不同机器做压缩拷贝同步更新,
  6. rsync -avuzr -e ssh mainserverip:/var/lib/mysql/ /var/lib/mysql/

3. 在主库上执行

  1. UNLOCK TABLES;

释放对主库的全局锁,恢复主库的正常使用。

4.修改从库中连接主库的信息
首先修改参数,设置为启动服务时不启动slave进程。修改my.cnf配置,在 [mysqld] 段添加开关

skip-slave-start

运行从库数据库,使用账号登陆到mysql,使用前面步骤 1 记录下来的信息修改从库连接主库的设置。

  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命令中不要忘记对地址,账号,密码和文件名参数的值加引号
开始从库进程

  1. START SLAVE;

使用

  1. SHOW SLAVE STATUS\G;

查看slave进程的状态。如果在做库文件拷贝的时候没有锁好库,会看到slave sql thread 有执行错。
碰到

Error: Got error 134 from storage engine

的可以通过

  1. REPAIR TABLE tbName

来修复,还有一些可以通过

  1. SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
  2. SLAVE START;

可以简单跳过错误处理。如果错误厉害一点的,这么处理不行,那就重新来过吧。

修改配置文件 my.cnf 将前面的开关复位 skip-slave-start 注释掉,在下次机器重新启动时自动开始 slave 进程。

对于inodb数据库需要使用sqldump的方式做数据的导出和再导入
可以在这个地址申请下载 ibbackup 的30天试用版,并配合 innobackup-1.5.0 备份脚本 来做热备份。

Popularity: 4% [?]

Related

Comments

One Response to “MySQL从库损坏后重建”

  1. MySQL从库配置维护回顾 : sunnyu on October 17th, 2008 4:51 pm

    [...] MySQL从库损坏后重建,顺便将MySQL的从库配置维护温习了一下。 [...]