Open BruceOuyang opened 2 years ago
[mysqld]
下追加如下设置
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = mixed
server-id 服务id,必须指定,在主从关系中保持唯一 log-bin 用于开启二进制日志,设置任意值 binlog_format 混合模式,主从必须设置一致
重启 mysql 服务
检查 binlog 状态
mysql> show variables like '%log_bin%';
+---------------------------------+----------------------------------+
| Variable_name | Value |
+---------------------------------+----------------------------------+
| log_bin | ON |
| log_bin_basename | /www/server/data/mysql-bin |
| log_bin_index | /www/server/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+----------------------------------+
mysql> show binlog events; +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.37-log, Binlog ver: 4 | | mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | | | mysql-bin.000001 | 154 | Stop | 1 | 177 | | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 3 rows in set (0.00 sec)
mysql> show binlog events in 'mysql-bin.000010'; +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ | mysql-bin.000010 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.37-log, Binlog ver: 4 | | mysql-bin.000010 | 123 | Previous_gtids | 1 | 154 | | +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 2 rows in set (0.00 sec)
mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 177 | | mysql-bin.000002 | 437 | | mysql-bin.000003 | 685 | | mysql-bin.000004 | 819 | | mysql-bin.000005 | 177 | | mysql-bin.000006 | 651 | | mysql-bin.000007 | 177 | | mysql-bin.000008 | 1496 | | mysql-bin.000009 | 177 | | mysql-bin.000010 | 154 | +------------------+-----------+ 10 rows in set (0.00 sec)
4. 创建一个用来同步的用户
mysql> grant replication slave on . to replicator@'192.168.114.%' identified by 'replicator'; Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
> 用户名:replicator 密码:replicator 主机:192.168.114.x网段
5. 查看 master 状态
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000010 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec)
> 此处的 File 与 Position 用于 slave 连接 master 时设置
#### slave 节点 mysql 配置
1. 修改 my.cnf 配置,在 `[mysqld]` 下追加如下设置
[mysqld] server-id = 2 binlog_format = mixed
> server-id 必须指定,在主从关系中保持唯一
> binlog_format 混合模式,主从必须设置一致
2. 重启 mysql 服务
3. 连接 master 服务器
mysql> change master to master_host='192.168.114.177', master_port=3306, master_user='replicator', master_password='replicator', master_log_file='mysql-bin.000010',master_log_pos=154; Query OK, 0 rows affected, 2 warnings (0.01 sec)
> master_host 主节点 mysql 服务的 IP
> master_port 主节点 mysql 服务的端口
> master_user 用来执行同步操作的 mysql 用户名
> master_password 用来执行同步操作的 mysql 用户密码
> master_log_file 同步主节点数据起始位置日志文件,通过在主节点执行 `show master status` 查看
> master_log_pos 同步主节点数据起始位置日志文件位置,通过在主节点执行 `show master status` 查看
5. 启动 slave
mysql> start slave; Query OK, 0 rows affected, 1 warning (0.00 sec)
6. 查看 slave 状态
mysql> show slave status\G; 1. row Slave_IO_State: Waiting for master to send event Master_Host: 192.168.114.177 Master_User: replicator Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000010 Read_Master_Log_Pos: 607 Relay_Log_File: mysql02-relay-bin.000002 Relay_Log_Pos: 773 Relay_Master_Log_File: mysql-bin.000010 Slave_IO_Running: Yes Slave_SQL_Running: Yes ... ... ...
1 row in set (0.00 sec)
ERROR: No query specified
> Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 表示连接 master 成功
7. 关闭 slave
stop slave;
#### 测试
1. 在 master 创建表和插入数据
mysql> CREATE DATABASE db_demo01 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; Query OK, 1 row affected (0.00 sec)
mysql> use db_demo01; Database changed
mysql> create table tb_user(id int primary key comment '主键ID'); Query OK, 0 rows affected (0.01 sec)
mysql> insert into tb_user values(1); Query OK, 1 row affected (0.01 sec)
mysql> select * from tb_user; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec)
2. 在 slave 查看数据
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db_demo01 | | mysql | | performance_schema | | sync_demo01 | | sync_demo02 | | sys | +--------------------+ 7 rows in set (0.00 sec)
mysql> use db_demo01; Database changed mysql> show tables; +---------------------+ | Tables_in_db_demo01 | +---------------------+ | tb_user | +---------------------+ 1 row in set (0.00 sec)
mysql> select * from tb_user; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec)
> follow https://blog.csdn.net/qq_15092079/article/details/81672920
如果之前配置过主从,需要先在 slave 节点执行
stop slave
关闭从节点的同步功能
修改 my.cnf 配置,在 [mysqld]
下追加如下设置
server-id = 1
log-bin = mysql-bin
binlog_format = mixed
gtid-mode = ON
enforce-gtid-consistency = ON
重启 mysql 服务
创建一个用来同步的用户
mysql> grant replication slave on *.* to replicator@'192.168.114.%' identified by 'replicator';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
> 用户名:replicator 密码:replicator 主机:192.168.114.x网段
#### slave 节点 mysql 服务配置
1. 修改 my.cnf 配置,在 `[mysqld]` 下追加如下设置
server-id = 2 log-bin = mysql-bin binlog_format = mixed gtid-mode = ON enforce-gtid-consistency = ON log_slave_updates = ON skip-slave-start = 1
2. 重启 mysql 服务
3. 连接 master 服务器
mysql> change master to master_host='192.168.114.177', master_port=3306, master_user='replicator', master_password='replicator', master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.01 sec)
#### 测试
1. 在 master 创建表和插入数据
mysql> drop schema if exists db_demo01;
mysql> CREATE DATABASE db_demo01 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; Query OK, 1 row affected (0.00 sec)
mysql> use db_demo01; Database changed
mysql> create table tb_user(id int primary key comment '主键ID'); Query OK, 0 rows affected (0.01 sec)
mysql> insert into tb_user values(1); Query OK, 1 row affected (0.01 sec)
mysql> select * from tb_user; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec)
mysql> show master status; +------------------+----------+--------------+------------------+----------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+----------------------------------------+ | mysql-bin.000001 | 326 | | | 441184f9-9deb-11ec-a83d-000c29cda359:1 | +------------------+----------+--------------+------------------+----------------------------------------+ 1 row in set (0.00 sec)
2. 在 slave 查看数据
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db_demo01 | | mysql | | performance_schema | | sync_demo01 | | sync_demo02 | | sys | +--------------------+ 7 rows in set (0.00 sec)
mysql> use db_demo01; Database changed mysql> show tables; +---------------------+ | Tables_in_db_demo01 | +---------------------+ | tb_user | +---------------------+ 1 row in set (0.00 sec)
mysql> select * from tb_user; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec)
mysql> show slave status\G; 1. row Slave_IO_State: Waiting for master to send event Master_Host: 192.168.114.177 Master_User: replicator Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 326 Relay_Log_File: mysql02-relay-bin.000003 Relay_Log_Pos: 539 Relay_Master_Log_File: mysql-bin.000001
...
...
...
Master_UUID: 441184f9-9deb-11ec-a83d-000c29cda359
...
...
Retrieved_Gtid_Set: 441184f9-9deb-11ec-a83d-000c29cda359:1
Executed_Gtid_Set: 441184f9-9deb-11ec-a83d-000c29cda359:1
...
...
> 观察 Executed_Gtid_Set 与 master 应该是一致的
> follow : https://blog.51cto.com/u_13434336/2178937
两种方式: 1、基于 binlog+pos 的主从复制 2、基于 gtid 的主从复制
假设两个 mysql 节点的网络连接信息: