MySQL主从复制
Look:209,By admin Posted On 2021-08-21
Mysql 主从复制原理:
- 在slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制。
- slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
- master服务器接收到来自slave服务器的IO线程的请求后,二进制转储IO线程会根据slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。
- 当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的relaylog(即中继日志)文件(hostname-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master.info文件中,以便下一次读取master端新binlog日志时能告诉master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容。
- slave服务器端的SQL线程会实时检测本地relaylog 中IO线程新增的日志内容,然后及时把relaylog文件中的内容解析成sql语句,并在自身slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点。
主机环境:
操作系统:Redhat6.5_x64
数据库版本:5.7.35-log
主:192.168.56.103
从:192.168.56.104
主从服务器数据库版本必须一致。
下载地址:https://downloads.mysql.com/archives/community/
一、主库配置
修改主库配置文件,开启binlog,并设置server-id,修改配文件后重启数据库服务
[root@LVS1 ~]# cat /etc/my.cnf [mysqld] basedir=/var/lib/mysql/ datadir=/var/lib/mysql/ socket=/var/lib/mysql/mysql.sock pid-file=/var/run/mysqld/mysqld.pid log_bin=/var/lib/mysql/mysqlbin log_error=/var/log/mysqld.log server-id=103 #主库读写都可以 read-only=0 #不需要同步的数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema #需要同步的数据库 binlog-do-db=liuzz symbolic-links=0修改配置文件后,重启服务:
[root@LVS1 ~]# service mysqld restart
创建从库同步帐号
mysql> grant replication slave on *.* to 'rep'@'192.168.56.104' identified by '123456'; mysql> flush privileges; #取消授权 #mysql> revoke replication slave on *.* from 'rep'@'192.168.56.104';
主数据库进行锁表操作:
mysql> flush tables with read lock;
查看主库二进制日志名和偏移量,为了从库启动时,从这个点进行数据恢复,查看主数据库状态:
mysql> show master status; +-----------------+----------+--------------+--------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------------+----------+--------------+--------------------------+-------------------+ | mysqlbin.000005 | 599 | liuzz | mysql,information_schema | | +-----------------+----------+--------------+--------------------------+-------------------+ 1 row in set (0.00 sec)
二、从库配置
修改配置文件/etc/my.cnf
[root@LVS2 ~]# cat /etc/my.cnf # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html [mysqld] server-id=104 #开启只读 read-only=1 #开启从库binlog #bin-log=mysqlbin
配置从库复制位置并开启从库模式:
mysql> mysql> change master to master_host='192.168.56.103', -> master_user='rep', -> master_password='123456', -> master_log_file='mysqlbin.000005', -> master_log_pos=599; mysql> start slave;
查看从库状态:
mysql> mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.56.103 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqlbin.000005 Read_Master_Log_Pos: 599 Relay_Log_File: LVS2-relay-bin.000011 Relay_Log_Pos: 810 Relay_Master_Log_File: mysqlbin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes
当Slave_IO_Running和Slave_SQL_Running都为Yes的时候就表示主从同步设置成功了
取消主库数据锁定:
mysql> unlock tables;