高性能MYSQL—基于binlog的主从复制
文章目录
- 高性能MYSQL---基于binlog的主从复制
- 1.主从复制原理
- 2.实现主从复制的要求
- 3.主从复制的实现
- - 配置主库端:
- - 配置从库端:
- - 测试:
1.主从复制原理
mysql的主从配置又叫replication,AB复制,基于binlog二进制日志,主数据库必须开启binlog二进制日志才能进行复制。
- 主数据库将更改操作记录到binlog二进制日志(主数据库有log dump线程和从数据库的i/o线程传递binlog)。
- 从库生成两个线程,一个i/o线程,一个SQL线程
- i/o线程去请求主库的binlog,并且得到的binlog日志写到relay log(中继日志)文件中
- 然后主库会生成一个log dump线程,用来给从库的i/o线程传binlog;SQL线程,会读取中继日志文件,并解析成具体的操作执行,这样主从的操作就一致了,而最终的数据也就一致了。
作为异步复制,其主库将事件写入binlog二进制文件,dump线程将binlog文件发送出去,不保证其他从节点是否会收到binlog二进制文件。
2.实现主从复制的要求
1.主库开启binlog日志(设置log-bin参数)
2.主从server-id不同
3.从库服务器能连同主库
3.主从复制的实现
- 配置主库端:
step1 在主库中安装mysql:
yum remove mysql-libs #清除yum里所有mysql依赖包
rpm -ivh mysql-community-common-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el6.x86_64.rpm --nodeps
step2 打开数据库:
systemctl start mysqld
step3 查看初始化密码:
cat /var/log/mysqld.log | grep password
step4 安全初始化:
mysql_secure_installation
step5 编辑配置文件:
vim /etc/my.cnf
最后面添加:
29 log-bin=mysql-bin #开启二进制日志
30 server-id=1 #服务器ID
systemctl restart mysqld #重启服务
step6 创建用户并授权:
参数解释:
replication 表示授权复制的权限
*.* 表示所有数据库可以进行同步
repl 表示授权名,可以随意填写
'172.25.254.%' 表示授权172.25.19.0/24的网段所有服务器可以同步, %表示任意
- 配置从库端:
step1 在主库中安装mysql:
yum remove mysql-libs #清除yum里所有mysql依赖包
rpm -ivh mysql-community-common-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el6.x86_64.rpm --nodeps
step2 打开数据库:
systemctl start mysqld
step3 查看初始化密码:
cat /var/log/mysqld.log | grep password
step4 安全初始化:
mysql_secure_installation
step5 编辑配置文件:
vim /etc/my.cnf
最后面添加:
28 server-id=2 #服务器ID,填写主端不同即可
systemctl restart mysqld #重启服务
step6 设定从设备并开启从设备:
注意:master_log_file 和master_log_pos 的值都要依照主设备状态中的值来设定
- 测试:
step1 在主库端创建库:
step2 在从库中可以看到westos库:
step3 在主库中创建表,并插入数据:
step4 在从库中可以看到数据: