主从复制原理
MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。
从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
主数据库配置
1:编辑mysql配置文件:vim /etc/my.cnf
###数据库id,=号后面自己写个id号
server_id=104
###开启mysql的binlog
log-bin=mysql-bin
2:重启mysql服务:service mysqld restart 或者 /etc/init.d/mysql restart
3:验证my.cnf的server_id是否配置成功
- SHOW VARIABLES LIKE '%server_id%';
- SHOW MASTER STATUS;
从数据库配置
1:编辑mysql配置文件:vim /etc/my.cnf
###数据库id,=号后面自己写个id号
server_id=130
###开启mysql的binlog
log-bin=mysql-bin
###指定需要同步主服务器的哪个数据库?
binlog_do_db=zjns
2:重启mysql服务:service mysqld restart 或者 /etc/init.d/mysql restart
3:验证my.cnf的server_id是否配置成功
- SHOW VARIABLES LIKE '%server_id%';
- SHOW MASTER STATUS;
开始同步(在从数据库中执行)
1:在从数据库中执行语句,从数据库同步主数据库配置
change master to master_host='主数据库服务器IP地址', master_port=主数据库端口, master_user='主数据库服务器登录账号', master_password='主数据库服务器登录密码',
master_log_file='主数据库服务器二进制执行文件名称', master_log_pos=主数据库服务器二进制执行文件从第几行开始同步;
change master to master_host='***.***.***.***', master_port=3306, master_user='***', master_password='***',
master_log_file='***', master_log_pos=***;
2:开启同步
- start slave; -- 开启同步
- stop slave; -- 停止同步
3:查看同步状态
- show slave status;
* 如果未同步成功,使用 show slave status 命令查看错误信息
* 问题修改完成后,重新查询
验证mysql主从复制
向主数据库中执行一条写操作的语句,查看从数据库中是否存在或者更改
附主从配置,非必须
sync_binlog=1
gtid_mode=on
enforce_gtid_consistency=1
log_slave_updates
binlog_format=row
relay_log=/usr/local/mysql/data/relay.log
relay_log_recovery=1
binlog_gtid_simple_recovery=1
auto_increment_increment=2
auto_increment_offset=1