mysql是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失。为了保证mysql数据库的可靠性,就要会一些提高可靠性的技术。mysql主从复制可以做到实时热备数据。本文介绍mysql主从复制原理及其配置过程。
术语:主从复制——master slave replication(m-s模式)。
实际上,它的原理思路很简单。mysql 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的sql语句。主从复制的原理其实就是"从"服务器向"主"服务器请求这个日志文件,"主"服务器会把这个 bin 日志复制到"从"服务器上执行一遍,这样"从"服务器上的数据就和"主"服务器上的数据相同了。
流程图:
图解:
主服务器:192.168.43.75
从服务器:192.168.43.111
mysql版本:mysql-8.0
系统:主 windows10,从 windows7
log-bin=master-log-bin server-id=1 innodb-file-per-table=on
查看主服务器状态信息:
注:这里的文件名和位置值会在后面的配置中用到。
grant replication slave, replication client on *.* to repl_user@192.168.43.111;
一定要刷新权限:
flush privileges;
主服务器配置完成。
log-bin=slave-log-bin relay-log=relay-log relay-log-index=relay-log.index
server-id=2 innodb_file_per_table=on
change master to master_host='192.168.43.75',master_port=3306,master_user='repl_user',master_password='123456',master_log_file='master-log-bin.000005',master_log_pos=155; # 这里的 master 日志文件和位置必须与主服务器当前状态一致!
此时会启动 io thread 和 sql thread 这两个线程。
(停止复制线程:stop slave)
查看从服务器状态信息:
mysql主从配置到此完成。
在主服务器上新建一个数据库test:
在从服务器上查看:
测试通过,完美。
当我们配置好mysql主从同步时,原本是可以实现主从同步的,但是重启机器后就发现无法同步了。
mysql replication 中 slave 机器上有两个关键的线程,死一个都不行,一个是 slave_io_running,一个是 slave_sql_running。一个负责与主机的 io 通信,一个负责自己的 slave mysql 语句执行。
1)如果是slave_sql_running:no,如图。
解决办法:
> stop slave; > set global sql_slave_skip_counter=1; > start slave; > show slave status\g;
2)如果是slave_io_running:no,如图。
解决办法:
查看主服务器状态:
查看从服务器状态:
找到问题所在:master_log_file没有对应。
> stop slave; > change master to master_log_file='mysql-bin.000026',master_log_pos=0; > slave start; > show slave status\g;
得解。
至此,转载请注明出处。
如对本文有疑问, 点击进行留言回复!!
在Ubuntu/Linux环境下使用MySQL开放/修改3306端口和开放访问权限
ORM框架Peewee(高级连接)peewee连接池、主从、重连、ssh连接
记一次Mysql主从复制延迟,Waiting for dependent transaction to commit
网友评论