本文共 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.53 备份主上的数据库
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 = 22 导入数据库
mysql -uroot -p </tmp/all.sql3 在从库上指定主库地址 端口 账号 密码
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=1reset 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/