master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
slave将master的binary log events拷贝到它的中继日志(relay log);
slave重做中继日志中的事件,将改变反映它自己的数据。
附一些问题的解决过程:
1). error:“/usr/sbin/mysqld: unknown variable 'master-host=10.1.4.154'”
原因是MySQL自5.1.7版本之后不支持master-host 类似的参数,需要在从库上执行:
change master to master_host='masterIP', master_user='slave', master_password='slvaePASS';
slave start;
2). slave status: "Slave_IO_Running:No"
Mysql代码
解决方法:
Mysql > stop slave;
Mysql > set global sql_slave_skip_counter =1 ;
Mysql > start slave;
3). Last_IO_Error: Got fatal error 1236 from master when reading data from binary log
对照master status 确认log文件及position数据是否正确。
4). Slave can not handle replication events with the checksum that master is configured to log
这个错误一般出现在master5.6,slave在低版本的情况下。这是由于5.6使用了crc32做binlog的checksum。除了把master的设置从crc32改到none
Mysql代码
binlog-checksum = none [my.cnf]
5). 在SLAVE执行CHANGE MASTER时,出现ERROR 1201 (HY000): Could not initialize master!
Msyql代码
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='192.168.100.10',master_user='replication',master_password='123456',master_log_file='updatelog.000004',master_log_pos=106;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
修正问题:
Mysql代码
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave;
Query OK, 0 rows affected,(0.00 sec)
mysql> change master to master_host='192.168.100.10',master_user='replication',master_password='123456',master_log_file='updatelog.000004',master_log_pos=106;
Query OK, 0 rows affected (0.05 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
6). 主从复制binlog问题,如果没有删除的配置,则会无限增长,严重占用磁盘空间。
Java代码
expire_logs_days = 30 #有效期30天,之前的会被删除
7). 如果主数据库服务器已经存在用户数据,那么在进行主从复制时,需要做以下处理。
Java代码
(1)主数据库锁表操作,不让数据再进行写入动作。
mysql>flush tables with read lock;
(2)查看主数据库的状态
mysql>show master status;
记下File以及Position的值,以备从服务器使用。
(3)把主服务器的数据文件复制到从服务器,最好先用tar归档压缩处理一下
(4)取消主数据库锁定
mysql>unlock tables;