虽然已经部署过很多次主从数据库了,但是最近在配置mysql5.6.10的时候还是遇到了很多问题,所以总结一下。

1、安装步骤,具体步骤网上有很多,这里需要注意mysql新版(好像是从5.5开始)都是通过cmake编译的

2、配置完主从的server-id,启动进入主库,添加从库用户权限

GRANT REPLICATION SLAVE, REPLICATION CLIENT  ON *.* TO 'slave'@'192.168.1.2 identified by '123456';

在很多教程上没有添加REPLICATION CLIENT,他的作用是使用户可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是说这个权限是用于授予账户监视Replication状况的权力。

3、在以前都是通过show master status命令获取主库的binglog和pos,然后在从库指定,但自从5.6以后你就无须再知道binlog和POS点,你只需要知道master的IP、端口,账号密码即可,因为同步复制是自动的,mysql通过内部机制GTID自动找点同步。

如何设置GTID方式的主从同步?

需要同时在master和slave上,在my.cnf文件上加入如下:

log-bin = mysql-bin
binlog_format = row
log_slave_updates
gtid-mode = ON
disable-gtid-unsafe-statements = ON
//然后只需要在从库执行
 mysql> CHANGE MASTER TO
> MASTER_HOST = master-host,
> MASTER_PORT = master-port,
> MASTER_USER = repl-user,
> MASTER_PASSWORD = repl-password,> MASTER_AUTO_POSITION = 1;

当然GTID存在很多问题,所以目前不推荐使用,还是按照以前的方式比较好:
1.GTID同步复制是基于事务。所以Myisam表不支持,这可能导致多个GTID分配给同一个事务。
2.CREATE TABLE … SELECT语句不支持。因为该语句会被拆分成create table 和insert两个事   务,并且这个两个事务被分配了同一个GTID,这会导致insert被备库忽略掉。
3.不支持CREATE TEMPORARY TABLE、DROP TEMPORARY TABLE 临时表操作。
4.如果你使用了GTID,那么就不能再使用传统binlog和POS方式

4、在我部署好一台机器的时候把编译好的mysql复制到另一个机器,修改完server-id和
mysql> change master to master_host=’192.168.1.1′, master_user=’slave’, master_password=’123456′, master_log_file=’mysql-bin.000113′,master_port=3306, master_log_pos=2121;

start slave后检查slave状态显示错误show slave status\G:
Slave_IO_Running:no
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids

错误的意思就是两个服务器用了同一个id,怎么可能,我明明修改了从库的id啊,检查也没问题,各种google百度之后,原来从mysql5.6开始,在第一次启动Mysql时,会生成一个server_uuid(服务器身份ID)并写入到数据目录下的auto.cnf文件,官方不建议修改,所以需要删除后再启动mysql,这时就没问题了