博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL主从同步
阅读量:2337 次
发布时间:2019-05-10

本文共 4344 字,大约阅读时间需要 14 分钟。

mysql主从同步是异步同步

从服务器需要两个线程来完成同步任务。1 IO线程 2 sql 线程
在主库上是一个线程完成主从同步任务 IO线程 主库必须开启binlog

主从同步需要的语句

CHANGE MASTER TO
MASTER_HOST=’10.125.192.6’,
MASTER_PORT=3306,
MASTER_USER=’’chunpeng’,
MASTER_PASSWORD=’111111’,
MASTER_LOG_FILE=’mysql-bin.000001’,
MASTER_LOG_POS= ; binlog位置

1同步开关 start slave

2主库IO线程,从库IO线程和sql线程,从库IO线程请求主库,主库Bing dump线程把binlog数据发送给从库,从库接收数据,并存为realylog(中继日志),并把当前位置点记录到realyinfo 文件中SQL线程把realylog内容解析为sql语句在从库中执行
在这里插入图片描述

例:

192.168.56.5 主库
192.168.56.200 从库

主库上的操作

1 主库开启binlog日志 从库binlog可开可不开 server-id主从不能相同
主库配置文件开启log-bin
vim /etc/my.cnf
[mysqld]
log-bin = /application/mysql/data/mysql-bin
server-id = 1
sync-binlog = ON
做主从同步为了防止主库突然宕机,执行的操作没有及时写入binlog中,要在主库配置文件中添加,只要主库有操作马上同步到binlog中。

开启后检查

mysql -uroot -p -e “show variables like ‘log_bin’;”
±--------------±------+
| Variable_name | Value |
±--------------±------+
| log_bin | ON |

2 授权同步账号

mysql> grant replication slave on . to rep@‘192.168.56.%’ identified by “slave.REP”;
mysql> flush privileges;
在从库上测试账号
mysql -urep -p -h 192.168.56.5

3 备份主上的数据库

mysql -uroot -p -e “show databases;”| grep -Ev “Database|master_gbk|information_schema|performance_schema|mysql”|xargs mysqldump -uroot -p -B -F --single-transaction --master-data=1 --events > /tmp/all.sql
把备份文件发送到从库
scp /tmp/all.sql 192.168.56.200:/tmp

查看binlog文件和位置点

show master status\G
*************************** 1. row ***************************
File: mysql-bin.000005
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:

从库上的操作

1 修改配置文件 主从server-id不能相同
vim /etc/my.cnf
[mysqld]
server-id = 2

2 导入数据库

mysql -uroot -p </tmp/all.sql

3 在从库上指定主库地址 端口 账号 密码

mysql> change master to
-> master_host=‘192.168.56.5’,
-> master_port=3306,
-> master_user=‘rep’,
-> master_password=‘slave.REP’;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

注:上面备份的时候用到了master-data=1 如果备份的时候没加这个参数就要指定 binlog文件和位置点 在主库上查寻mysql> show master status; 在上面的语句后面继续添加下面两句 master_log_file=‘mysql-bin.000002’, master_log_pos=336;

4 从库开启同步

mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.56.5
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 120
Relay_Log_File: web01-relay-bin.000004
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 503
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 82e612f0-39bd-11e9-9b5f-000c29b1251d
Master_Info_File: /application/mysql-5.6.15/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to updat
e it Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0

关键的几个指标

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注:IO线程和SQL线程必须是YES
Seconds_Behind_Master: 0 落后主多长时间 此数据太大就需要关注了 监控也要监控此项
Last_IO_Errno: IO错误码
Last_SQL_Errno: SQL错误码
Read_Master_Log_Pos: 120 IO线程读取到二进制日志点
Exec_Master_Log_Pos: 120 执行完成的日志点 从库提权时很重要 离主库越近越好

同步成功后从库会生成如下文件

master.info 授权信息以及读取哪个mysql-bin 和位置点
relay-log.info relaylog信息
xxx-relay-bin.000003 SQL线程执行后的SQL语句
xxx-relay-bin.index 索引文件

从服务器的mysql服务在启动时候不要自动启动从服务线程

在从服务器上:
[mysqld]
skip-slave-start=1

reset master 将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始,用于第一次进行搭建主从库时,进行主库binlog初始化工作

使用场景 第一次搭建主从数据库时,用于主库的初始化binglog操作;

reset slave 将使slave 忘记主从复制关系的位置信息。该语句将被用于干净的启动, 它删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件。

使用场景:当原来的主从关系被破坏之后,从库经过重新初始化后直接连接会报 ERROR 1201的错误,运行reset slave后,重新配置主从连接就可以了

级联同步(主从从)

如果从库还想做级联从库(从库下面的从,主从从)需要从库打开log-bin和log-slave-updates参数默认my.cnf中没有log-slave-updates需手工添加log_slave_updates=1,不添加的问题是从库从主库同步过来的sql语句不写入从库的binlog日志中,所以从从就无法备份数据

转载地址:http://ekrpb.baihongyu.com/

你可能感兴趣的文章
我已经安装了哪个版本的Python?
查看>>
ng-if和ng-show / ng-hide有什么区别
查看>>
将Java InputStream的内容写入OutputStream的简便方法
查看>>
用Java复制文件的标准简洁方法?
查看>>
管理webpack中的jQuery插件依赖项
查看>>
删除可能不存在的文件的大多数pythonic方式
查看>>
如何在Eclipse中为Java文本编辑器更改字体大小?
查看>>
我们应该@Override接口的方法实现吗?
查看>>
ng-repeat定义次数而不是重复数组?
查看>>
选择语句以查找某些字段的重复项
查看>>
引导程序中“col-md-4”,“col-xs-1”,“col-lg-2”中数字的含义
查看>>
JavaScript ES6类中的私有属性
查看>>
List vs tuple,何时使用? [重复]
查看>>
默认情况下,如何以管理员身份运行Visual Studio?
查看>>
通过varargs参数可能导致堆污染
查看>>
Git学习笔记1 神奇的git stash
查看>>
Unable to locate package错误解决办法
查看>>
关于service中添加Transaction注解后,service无法注入bean
查看>>
linux shell 自定义函数(定义、返回值、变量作用域)介绍
查看>>
写自己的ASP.NET MVC框架(上)
查看>>