mysql主从复制搭建
主从同步介绍
什么是MySQL的主从同步:
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
怎么实现MySQL的主从同步:
MySQL 主从复制是基于主服务器在二进制日志跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上启用二进制日志。
每个从服务器从主服务器接收已经记录到日志的数据。当一个从服务器连接到主服务器时,它通知主服务器从服务器日志中读取最后一个更新成功的位置。
主服务器记录二进制日志:主服务器上的数据变化(如INSERT、UPDATE、DELETE操作)被记录到二进制日志(binlog)中。
从服务器读取二进制日志:从服务器通过I/O线程从主服务器读取二进制日志并写入本地的中继日志(relay log)。
从服务器应用中继日志:从服务器的SQL线程读取中继日志并执行其中的SQL语句,使从服务器的数据与主服务器的数据保持同步。
从服务器接收从那时发生起的任何更新,并在主机上执行相同的更新。然后封锁等待主服务器通知的更新。
从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
MySQL主从同步复制模式
MySQL主从同步复制模式指的是主服务器(执行写操作的服务器)什么时候将SQL命令的执行结果返还给客户端
分为三种情况:
- 异步复制(默认)
- 主节点在执行写操作后,将写操作的日志异步发送到从节点。主节点不会等待从节点的同步完毕,直接讲结果返回给客户端,因此主节点可以以较高的速度执行写操作,而从节点可能会有一定的延迟。由于异步复制的延迟,如果主节点故障或数据丢失,可能会造成从节点数据与主节点不一致。
- 全同步复制
- 在全同步复制中,主节点在执行写操作后,等待所有从节点全部同步完数据之后,在将结果返回至客户端这样可以确保主节点和从节点的数据一致性,但会影响主节点的写操作速度,因为主节点需要等待从节点的确认。
- 半同步复制
- 在半同步复制中,主节点在执行写操作后,等待至少一个从节点同步完数据再将结果返回至客户端。这样可以提高主节点的写操作速度,同时保证主节点和至少一个从节点的数据一致性。但如果从节点故障或延迟高,可能会造成主节点的等待时间增加。
主从复制的类型
基于二进制日志复制(有三种形式)
-
基于SQL语句的复制;
-
基于行的复制;
-
混合模式复制。
基于GTID复制(Mysql版本 >= 5.7及以上推荐使用)
Mysql主从同步搭建
环境准备
zyj86 192.168.3.86 主库
zyj87 192.168.3.87 从库
安装mysql服务
dnf module install mysql -y
systemctl start mysqld
#登录mysql 修改root密码
mysql -uroot -p
mysql> ALTER USER root@"localhost" IDENTIFIED BY 'aaa...111';
如果想使用简单密码可以修改密码策略
mysql> SET GLOBAL validate_password.policy=LOW; #设置密码策略
mysql> SET GLOBAL validate_password.length=4; #设置密码长度为4
mysql> SET GLOBAL validate_password.check_user_name=OFF; #关闭用户名检测可以用用户名作为密码
配置主库
创建需要同步的数据库
mysql> create database HA;
mysql> use HA;
mysql> create table usr(id int,name varchar(20));
修改主库配置文件
vim /etc/my.cnf.d/mysql-server.cnf
server_id=1 #指定server_id,每台主机都不一样
log-bin=mysql-bin-master #启用二进制日志
binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名,测试*****,之前存在的数据库不会被同步,需要导出数据到从库
binlog-ignore-db=mysql #不可以被从服务器复制的库
指定同步的数据库或忽略的数据库
binlog_do_db 和 binlog_ignore_db 参数是互斥的,通常只选择其中一个进行设置。它们只能在启动命令行中或在配置文件中设置。如果同时指定了多个数据库,那么需要将它们分行写入,例如:
# 指定 db1 db2 记录binlog
[mysqld]
binlog_do_db = db1
binlog_do_db = db2
# 不让 db3 db4 记录binlog
[mysqld]
binlog_ignore_db = db3
binlog_ignore_db = db4
当 binlog_do_db 为空时,所有的数据库操作都会被记录到二进制日志中,除非 binlog_ignore_db 参数中指定了某些数据库。相反,当 binlog_ignore_db 为空时,没有任何数据库操作会被排除出二进制日志,除非 binlog_do_db 参数中指定了某些数据库
用户授权(用户slaveusr,密码为slavepwd,这个用户用于从服务器连接主服务器同步数据)
- 使用 mysql_native_password 插件验证该用户的密码
- REPLICATION SLAVE 表示使用户拥有向主服务器复制的权限
mysql> CREATE USER 'slaveusr'@'%' IDENTIFIED with mysql_native_password BY 'slavepwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveusr'@'%';
重启动mysqld服务
systemctl restart mysqld
查看状态信息:
mysql> show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-master.000002 | 157 | HA | mysql | |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
查看主数据库是否启用二进制日志
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
查看二进制日志
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin-master.000001
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 126
Info: Server ver: 8.0.36, Binlog ver: 4
*************************** 2. row ***************************
Log_name: mysql-bin-master.000001
Pos: 126
Event_type: Previous_gtids
Server_id: 1
End_log_pos: 157
Info:
*************************** 3. row ***************************
Log_name: mysql-bin-master.000001
Pos: 157
Event_type: Stop
Server_id: 1
End_log_pos: 180
Info:
3 rows in set (0.00 sec)
**注意:**阻止主数据库的更改,如果能保证在数据库配置期间不对主数据库进行变更,可以跳过这一步
在数据库上加上读锁定
mysql> FLUSH TABLES WITH READ LOCK;
在所有配置完成之后,释放锁定(下面这条语句暂时不执行,在配置完成之后再释放)
mysql> UNLOCK TABLES;
至此主库配置完成
配置从数据库
测试从库是否可以连接主库
mysql -uslaveusr -pslavepwd -h 192.168.3.86
备份master主机上的数据(虽然现在没有多余的数据,但工作中一定会有旧数据)
备份已有HA数据库的数据
mysqldump -hlocalhost -uroot -p'aaa...111' -B HA > habackup.sql
拷贝到从库所在机器
scp habackup.sql 192.168.3.87:/root/habackup.sql
导入数据库
mysql -uroot -paaa...111 < /root/habackup.sql
修改从库配置文件
vim /etc/my.cnf.d/mysql-server.cnf
server-id=2
重启mysqld服务
systemctl restart mysqld
查看主服务器binlog日志状态
mysql> show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-master.000002 | 157 | HA | mysql | |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
设置从库连接主库信息
#MASTER_HOST= 指定主服务器的IP地址
#MASTER_USER= 指定主服务器授权用户
#MASTER_PASSWORD= 指定授权用户的密码
#MASTER_LOG_FILE= 指定主服务器binlog日志文件(到master上查看)
#MASTER_LOG_POS= 指定主服务器binlog日志偏移量(去master上查看)
#先停止SLAVE进程
mysql> STOP SLAVE;
#指定主服务器信息
mysql> CHANGE MASTER TO MASTER_HOST="192.168.3.86",MASTER_USER="slaveusr",MASTER_PASSWORD="slavepwd", MASTER_LOG_FILE="mysql-bin-master.000002",MASTER_LOG_POS=157;
#启动SLAVE进程
mysql> START SLAVE;
查看从库同步状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.3.86
Master_User: slaveusr
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-master.000002
Read_Master_Log_Pos: 157
Relay_Log_File: zyj87-relay-bin.000002
Relay_Log_Pos: 333
Relay_Master_Log_File: mysql-bin-master.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: 157
Relay_Log_Space: 543
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: 74be5df6-6a96-11ef-b1e2-000c29298301
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
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
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.00 sec)
主库查看进程列表
mysql> show processlist\G
*************************** 2. row ***************************
Id: 15
User: slaveusr
Host: 192.168.3.87:34662
db: NULL
Command: Binlog Dump
Time: 393
State: Source has sent all binlog to replica; waiting for more updates
Info: NULL
state 状态:Master 已经将所有binlog 发送到slave; 等待更多更新
插入数据测试同步
主库插入数据
mysql -uroot -paaa...111
mysql> use HA;
mysql> show tables;
+--------------+
| Tables_in_HA |
+--------------+
| usr |
+--------------+
1 row in set (0.00 sec)
mysql> desc usr;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO HA.usr VALUES(1,"Sam");
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO HA.usr VALUES(2,"jack");
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM HA.usr;
+------+------+
| id | name |
+------+------+
| 1 | Sam |
| 2 | jack |
+------+------+
2 rows in set (0.01 sec)
从库查看
mysql -uroot -paaa...111
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| HA |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use HA
mysql> show tables;
+--------------+
| Tables_in_HA |
+--------------+
| usr |
+--------------+
1 row in set (0.00 sec)
mysql> select * from HA.usr;
+------+------+
| id | name |
+------+------+
| 1 | Sam |
| 2 | jack |
+------+------+
2 rows in set (0.00 sec)
至此主从同步就搭建完毕了。
从库停止而主库有写入再次启动也可以继续同步。
搭建完成
但是当我们使用这种位点同步的方式时,两种场景下的操作步骤比较复杂。
1:首次开启主从复制的步骤复杂
- 第一次开启主从同步时,要求从库和主库是一致的。
- 找到主库的 binlog 位点。
- 设置从库的 binlog 位点。
- 开启从库的复制线程。
2:恢复主从复制的步骤复杂
- 找到从库复制线程停止时的位点。
- 解决复制异常的事务。无法解决时就需要手动跳过指定类型的错误,比如通过设置slave_skip_errors=1032,1062。当然这个前提条件是跳过这类错误是无损的。(1062 错误是插入数据时唯一键冲突;1032 错误是删除数据时找不到行)
不论是首次开启同步时需要找位点和设置位点,还是恢复主从复制时,设置位点和忽略错误,这些步骤都显得过于复杂,而且容易出错。所以 MySQL 5.6 版本引入了 GTID,彻底解决了这个困难。
GTID的概念
- GTID即全局事务ID:global transaction identifier;
- GTID是一个事务一一对应,并且全局唯一ID;
- 一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致;
- GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。 而是使用MASTER_AUTO_POSTION=1的方式开始复制;
- MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善;
- 在传统的slave端,binlog是不用开启的,但是在GTID中slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。
GTID的优势
- 更简单的实现failover,不用以前那样在需要找log_file和log_pos;
- 更简单的搭建主从复制;
- 比传统的复制更加安全;
- GTID是连续的没有空洞的,保证数据的一致性,零丢失。
GTID的原理
- 当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中;
- binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值;
- sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID;
- 如果有记录,说明该GTID的事务已经执行,slave会忽略;
- 如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog,在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行;
- 在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。
基于GTID的主从复制搭建
环境准备
zyj86 192.168.3.86 主库
zyj87 192.168.3.87 从库
安装mysql服务
dnf module install mysql -y
systemctl start mysqld
#登录mysql 修改root密码
mysql -uroot -p
mysql> ALTER USER root@"localhost" IDENTIFIED BY 'aaa...111';
如果想使用简单密码可以修改密码策略
mysql> SET GLOBAL validate_password.policy=LOW; #设置密码策略
mysql> SET GLOBAL validate_password.length=4; #设置密码长度为4
mysql> SET GLOBAL validate_password.check_user_name=OFF; #关闭用户名检测可以用用户名作为密码
配置主库
创建需要同步的数据库
mysql> create database HA;
mysql> use HA;
mysql> create table usr(id int,name varchar(20));
修改主库配置文件
vim /etc/my.cnf.d/mysql-server.cnf
server_id=1 #指定server_id,每台主机都不一样
log-bin=mysql-bin-master #启用二进制日志
binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名,之前存在的数据库不会被同步,需要导出数据到从库
binlog-ignore-db=mysql #不可以被从服务器复制的库
gtid_mode=ON # 开启GTID
enforce-gtid-consistency=ON # 保证GTID的强一致性
GTID模式核心参数:
gtid-mode=on --启用gtid类型,否则就是普通的复制架构
enforce-gtid-consistency=true --强制GTID的一致性
log-slave-updates=1 --slave更新是否记入日志
指定同步的数据库或忽略的数据库
binlog_do_db 和 binlog_ignore_db 参数是互斥的,通常只选择其中一个进行设置。它们只能在启动命令行中或在配置文件中设置。如果同时指定了多个数据库,那么需要将它们分行写入,例如:
# 指定 db1 db2 记录binlog
[mysqld]
binlog_do_db = db1
binlog_do_db = db2
# 不让 db3 db4 记录binlog
[mysqld]
binlog_ignore_db = db3
binlog_ignore_db = db4
当 binlog_do_db 为空时,所有的数据库操作都会被记录到二进制日志中,除非 binlog_ignore_db 参数中指定了某些数据库。相反,当 binlog_ignore_db 为空时,没有任何数据库操作会被排除出二进制日志,除非 binlog_do_db 参数中指定了某些数据库
用户授权(用户slaveusr,密码为slavepwd,这个用户用于从服务器连接主服务器同步数据)
- 使用 mysql_native_password 插件验证该用户的密码
- REPLICATION SLAVE 表示使用户拥有向主服务器复制的权限
mysql> CREATE USER 'slaveusr'@'%' IDENTIFIED with mysql_native_password BY 'slavepwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveusr'@'%';
重启动mysqld服务
systemctl restart mysqld
查看状态信息:
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin-master.000001
Position: 336
Binlog_Do_DB: HA
Binlog_Ignore_DB: mysql
Executed_Gtid_Set: be66dfd4-6ab8-11ef-8178-000c29298301:1
1 row in set (0.00 sec)
查看主数据库是否启用二进制日志
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
查看二进制日志
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: binlog.000001
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 126
Info: Server ver: 8.0.36, Binlog ver: 4
*************************** 2. row ***************************
Log_name: binlog.000001
Pos: 126
Event_type: Previous_gtids
Server_id: 1
End_log_pos: 157
Info:
*************************** 3. row ***************************
Log_name: binlog.000001
Pos: 157
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 236
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************
Log_name: binlog.000001
Pos: 236
Event_type: Query
Server_id: 1
End_log_pos: 447
Info: ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*EF0036DB88787680886352FD7982D31F99BBFAC4' /* xid=7 */
*************************** 5. row ***************************
Log_name: binlog.000001
Pos: 447
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 524
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 6. row ***************************
Log_name: binlog.000001
Pos: 524
Event_type: Query
Server_id: 1
End_log_pos: 626
Info: create database HA /* xid=8 */
*************************** 7. row ***************************
Log_name: binlog.000001
Pos: 626
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 703
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 8. row ***************************
Log_name: binlog.000001
Pos: 703
Event_type: Query
Server_id: 1
End_log_pos: 828
Info: use `HA`; create table usr(id int,name varchar(20)) /* xid=13 */
*************************** 9. row ***************************
Log_name: binlog.000001
Pos: 828
Event_type: Stop
Server_id: 1
End_log_pos: 851
Info:
9 rows in set (0.00 sec)
**注意:**阻止主数据库的更改,如果能保证在数据库配置期间不对主数据库进行变更,可以跳过这一步
在数据库上加上读锁定
mysql> FLUSH TABLES WITH READ LOCK;
在所有配置完成之后,释放锁定(下面这条语句暂时不执行,在配置完成之后再释放)
mysql> UNLOCK TABLES;
至此主库配置完成
配置从数据库
测试从库是否可以连接主库
mysql -uslaveusr -pslavepwd -h 192.168.3.86
备份master主机上的数据(虽然现在没有多余的数据,但工作中一定会有旧数据)
备份已有HA数据库的数据
mysqldump -hlocalhost -uroot -p'aaa...111' -B HA --set-gtid-purged=OFF > habackup.sql
拷贝到从库所在机器
scp habackup.sql 192.168.3.87:/root/habackup.sql
导入数据库
mysql -uroot -paaa...111 < /root/habackup.sql
修改从库配置文件
vim /etc/my.cnf.d/mysql-server.cnf
server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON
重启mysqld服务
systemctl restart mysqld
查看主服务器binlog日志状态
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin-master.000001
Position: 336
Binlog_Do_DB: HA
Binlog_Ignore_DB: mysql
Executed_Gtid_Set: be66dfd4-6ab8-11ef-8178-000c29298301:1
1 row in set (0.00 sec)
设置从库连接主库信息
#MASTER_HOST= 指定主服务器的IP地址
#MASTER_USER= 指定主服务器授权用户
#MASTER_PASSWORD= 指定授权用户的密码
#MASTER_AUTO_POSITION=1 自动确定pos点
#先停止SLAVE进程
mysql> STOP SLAVE;
#指定主服务器信息
mysql> CHANGE MASTER TO MASTER_HOST="192.168.3.86",MASTER_USER="slaveusr",MASTER_PASSWORD="slavepwd",MASTER_AUTO_POSITION=1;
#启动SLAVE进程
mysql> START SLAVE;
查看从库同步状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.3.86
Master_User: slaveusr
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin-master.000001
Read_Master_Log_Pos: 336
Relay_Log_File: zyj87-relay-bin.000002
Relay_Log_Pos: 566
Relay_Master_Log_File: mysql-bin-master.000001
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: 336
Relay_Log_Space: 776
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: be66dfd4-6ab8-11ef-8178-000c29298301
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: be66dfd4-6ab8-11ef-8178-000c29298301:1
Executed_Gtid_Set: be66dfd4-6ab8-11ef-8178-000c29298301:1
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.00 sec)
Master_Log_File: mysql-bin-master.000001 #自动找到
Read_Master_Log_Pos: 336 #自动找到
Relay_Log_File: zyj87-relay-bin.000002 #本地relay文件
Executed_Gtid_Set: be66dfd4-6ab8-11ef-8178-000c29298301:1 #与master的一致
插入数据测试同步
主库插入数据
mysql -uroot -paaa...111
mysql> use HA;
mysql> show tables;
+--------------+
| Tables_in_HA |
+--------------+
| usr |
+--------------+
1 row in set (0.00 sec)
mysql> desc usr;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO HA.usr VALUES(1,"Sam");
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO HA.usr VALUES(2,"jack");
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM HA.usr;
+------+------+
| id | name |
+------+------+
| 1 | Sam |
| 2 | jack |
+------+------+
2 rows in set (0.01 sec)
从库查看
mysql -uroot -paaa...111
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| HA |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use HA
mysql> show tables;
+--------------+
| Tables_in_HA |
+--------------+
| usr |
+--------------+
1 row in set (0.00 sec)
mysql> select * from HA.usr;
+------+------+
| id | name |
+------+------+
| 1 | Sam |
| 2 | jack |
+------+------+
2 rows in set (0.00 sec)
至此主从同步就搭建完毕了。
从库停止而主库有写入再次启动也可以继续同步。
附
#添加表字段语句
ALTER TABLE usr ADD age INT;
#插入语句
INSERT INTO HA.usr VALUES(1,"Sam");
SELECT * FROM HA.usr;
±-----±-----+
| id | name |
±-----±-----+
| 1 | Sam |
| 2 | jack |
±-----±-----+
2 rows in set (0.01 sec)
从库查看
```sql
mysql -uroot -paaa...111
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| HA |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use HA
mysql> show tables;
+--------------+
| Tables_in_HA |
+--------------+
| usr |
+--------------+
1 row in set (0.00 sec)
mysql> select * from HA.usr;
+------+------+
| id | name |
+------+------+
| 1 | Sam |
| 2 | jack |
+------+------+
2 rows in set (0.00 sec)
至此主从同步就搭建完毕了。
从库停止而主库有写入再次启动也可以继续同步。
附
#添加表字段语句
ALTER TABLE usr ADD age INT;
#插入语句
INSERT INTO HA.usr VALUES(1,"Sam");