mysql 主从备份的原理:
主服务器在做数据库操作的时候将所有的操作通过日志记录在binlog里面,有专门的文件存放。如localhost-bin.000003,这种,从服务器 和主服务配置好关系后,通过I/O线程获取到这个binlog文件然后写入到从服务器的relaylog(中继日志)中,然后从服务器执行从服务器中的sql语句进行数据库的同步。
实现:
准备:两台服务器,mysql环境,可以是Windows,Linux,下面是两台Linux服务器,192.168.3.32(主),192.168.3.31(从)。
1. 配置主服务器上mysql的配置文件,配置文件在/etc/my.cnf
log_bin放开注释
server-id=1 新增
2. 重启数据库
systemctl start mysqld
3. 创建复制用户并赋权限给从服务器 把主服务的所有东西。
grant replication slave on *.* to 'slave'@'192.168.3.31' identified by 'Pangolin123!';
注:‘slave’是复制数据的用户名,'Pangolin123!'是密码。192.168.3.31 可以改成%,表示所有的从服务器都可以。不做限制。
4. 更新权限
flush privileges;
5. 在从服务器上进行配置数据库
server-id=2
6. 重启数据库
systemctl start mysqld
7. 在从服务器上进行从数据库的复制数据的配置
首先登录 mysql -uroot -p
stop slave;
change master to master_host='192.168.3.32', master_user='slave',
master_password='Pangolin123!',master_log_file='mysql-bin.000006',
master_log_pos=2060 ;
注:mysql-bin.000006 这个东西需要自己找,在mysql的安装目录 /var/lib/mysql下面
start slave;
show slave status \G;
查看是否正常:
这两个Yes表示正常。
8. 测试。
9. 错误总结:
错误1:从服务器 show slave status \G; 显示
Slave_IO_Running:NO
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Binary log is not open'
我解决的办法是重启一下就好了。
重启之后再mysql的目录下就可以看到 binlog的生成。
错误2
Slave_IO_Running:NO
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
解决方案:在主服务器上进行日志刷新
mysql -uroot -p
flush logs;
show master status;
显示这个,
然后到从服务器上重新配置binlog文件。
stop slave;
CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000003',MASTER_LOG_POS=322;
start slave;
show slave status \G;
错误3:
Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the first event 'localhost-bin.000002' at 107, the last event read from './localhost-bin.000002' at 123, the last byte read from './localhost-bin.000002' at 126.'
是由于配置错了binlog文件的开始位置。参考错误2 重新配置即可。
主从配置已完,下篇是springboot项目怎么配置读写分离。
敬请期待。