主从同步原理
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
主数据库配置
1.修改master配置文件
[mysqld]
log-bin=mysql-bin
server-id=3307
2.启动mysql,并创建slave用户并分配权限
GRANT REPLICATION SLAVE ON *.* TO 'slave_account'@'127.0.0.1' IDENTIFIED BY '123456';
刷新权限
flush privileges;
使用命令查看新添用户
select user,host from mysql.user;
3.查看master状态
show master status;
记录File和Position字段值
Binlog_Do_DB表示需要同步的数据库,Binlog_Ignore_DB表示忽略的数据
从数据库配置
1.修改slave配置文件
[mysqld]
server-id=3308
2.启动mysql(slave)
CHANGE MASTER TO master_host = '127.0.0.1',
master_port=3307,
master_user = 'slave_account',
master_password = '123456',
master_log_file = 'mysql-bin.000003',
master_log_pos = 1395;
master_log_file和master_log_pos对应上述master记录的File和Position字段
3.启动slave
start slave
如果需要重新配置slave连接master信息 ,需要先关闭slave ,使用命令 stop slave
4.查看状态
show slave status
IO线程和 SQL线程启动成功表示mysql主从配置成功。
如果字段值为No,或者Connecting,观察Last_IO_Error和Last_SQL_Error字段值描述
*注意
配置过程中存在的Last_IO_Error消息
1.Fatal error: The slave I/O thread stops because master and slave have equal
即主从架构中使用了相同的UUID。
a)检查主从server-id
show variables like 'server_id';
如果相同修改配置文件server-id值
b)检查auto.cnf文件中server-uuid值
重命令文件
mv auto.cnf auto.cnf.bk
重启mysql服务自动生成新的auto.cnf
c)在master端中查看自身uuid
show variables like 'server_uuid';
d)在master端查看slave端uuid
show slave hosts;
验证主从uuid不同
2.Got fatal error 1236 from master when reading data from binary log: 'Could not open log file'
在master端刷新logs
flush logs;