主机已经运行一段时间,从机重新配置,我们的主从架构是多主一从,从机已经有了其他主机正在同步,所有表都是innodb。

1、停掉主服务器

包括mysql服务,web服务,最主要的mysql服务器一定要关闭

2、  将主服务器ibdata1以及库文件夹整体打包

ibdata1压缩打包,数据库文件压缩打包(tar -zcvf dir_name.tar.gz  dir_name 注:dir_name为被打包的文件目录)

3、  主服务器开启bin-log(my.cnf里增加配置log-bin=mysql-bin),启动,记录binlog的文件初始位置,恢复主服务器环境(需要一个小时)

4、  把打包文件送到从服务器

rsync 例如:rsync ibdata1 10.10.12.xxx:/data 是将ibdata1 传送到10.10.12.xxx的data目录,这时会提示输入10.10.12.xxx的用户名和密码

5、  从服务器同步全部停掉(stop slave),web关掉,mysql服务关闭(service mysqld stop)

6、  备份从服务器ibdata1文件(重命名),当复制过来的数据库表引擎转换成myisam引擎后,可重新恢复此文件

7、  将主服务器打包的数据文件(第2部打包的文件),移到从服务器数据库数据目录(压缩的文件记得解压);复制过来的ibdata1要有读取和写入的权限

8、  将要同步的库(bala_ec)所有表全部转成myisam引擎,这时复制过来的ibdata1文件可以删除了

转化数据库表引擎的方法参考后面语句

9、  将第4部重命名的ibdata1恢复,这个时候恢复到从库原先的数据状态

10、              再把要同步的库所有表全部转成innodb引擎

11、              设置从服务器的从库配置,启动主从同步—命令2

12、              在从库中启动主从同步 start slave

 

附:

命令1

show master status;

记录master_log_file、master_log_pos

命令2

Change master to master_host=’10.10.12.yy’, master_user=’yyyyy’, master_password=’yyyyy’, master_log_file=’主服同步bin文件名’, master_log_pos=主服同步bin文件的位置 for channel “xxxxx”;

在从库启动主从同步

Start slave

查看从库状态

Show slave status [for channel “”]

改变数据库表引擎:

alter table `acl_level` engine=myisam;

查看数据库中所有的表示例:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘yyyy’;

查看数据库中表引擎为MyISAM的表示例:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘yyyy’ AND ENGINE = ‘MyISAM’;

把sql语句执行结果写入到文件

mysql -u root -p -e ”use bala_ec;show table status” > /data/1.sql

从库常见异常处理

1、因idbdata1文件里有垃圾表结构,导致myisam无法转innodb,(报表已存在,重启后会在数据目录自动生成idb文件)

先删除表,再重建表

2、同样idbdata1里有垃圾表结构,导致truncate myisam表后表无法创建也无法删除,拷贝一个frm文件过来,然后再删除表,再重建表

3、从库无法启动,报当前主库日志文件当前位置的sql无法执行,在主机使用

mysqlbinlog –start-position=报出问题的位置 –stop-position=往后加几十行 -d 主库名 binlog文件名

看一下指定位置是什么语句,如果不是正常语句位置,可以过去,用change master往后跳到下一条语句的位置