mysql 主从构建实战
主从同步构建过程
1 创建2个数据库实例
2 在从库上激活日志实功能(binlog)
3在主库上创建连接用户
4-在主库上备份数据
5-在从库上恢复部分主库信息
6-在从库上配置主库连接信息
7在从库上激活主从同步功能
8-检查从库同步状态
9-测试主从同步效果验证
操作步骤01:需要准备两台以上数据库实例
# 数据库节点01服务已经构建完毕
[root@baimeidashu-01 ~]# mysqld_safe --defaults-file=/data/3307/data/my.cnf &
[root@baimeidashu-01 ~]# netstat -lntp|grep 3307
tcp6 0 0 :::3307 :::* LISTEN 114722/mysqld
[root@baimeidashu-01 ~]# mysql -S /tmp/mysql3307.sock
# 数据库节点02服务已经构建完毕
[root@baimeidashu-01 ~]# mysqld_safe --defaults-file=/data/3308/data/my.cnf &
[root@baimeidashu-01 ~]# netstat -lntp|grep 3308
tcp6 0 0 :::3308 :::* LISTEN 122865/mysqld
[root@baimeidashu-01 ~]# mysql -S /tmp/mysql3308.sock
操作步骤02:主数据库二进制日志功能开启
# 主数据库需要开启binlog日志功能
mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------------+
| log_bin | ON |
| log_bin_basename | /data/3307/data/binlog |
| log_bin_index | /data/3307/data/binlog.index |
| sql_log_bin | ON |
+---------------------------------+--------------------------------------+
6 rows in set (0.01 sec)
-- 核实确认binlog日志功能在主库上已经开启
操作步骤03:核实主从复制主机的信息情况
# 确认多个复制节点的服务标识不同(server id/server_uuid)
mysql> set global server_id=7;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
| 7 |
+-------------+
1 row in set (0.00 sec)
mysql> select @@server_uuid;
+--------------------------------------+
| @@server_uuid |
+--------------------------------------+
| 949efd68-6420-11ed-b1ad-000c2996c4f5 |
+--------------------------------------+
1 row in set (0.00 sec)
-- 主库上server_id server_uuid信息(3307节点做检查)
mysql> set global server_id=8;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
| 8 |
+-------------+
1 row in set (0.00 sec)
mysql> select @@server_uuid;
+--------------------------------------+
| @@server_uuid |
+--------------------------------------+
| ed6c1c6f-6f33-11ed-b630-000c2961cd06 |
+--------------------------------------+
1 row in set (0.00 sec)
-- 从库上server_id server_uuid信息(3308节点做检查)
-- 根据服务标识信息的不同,可以用于在进行主从复制时,辨别节点之间的关系
# 确认多个复制节点的时间信息同步
[root@baimeidashu-01 ~]# date
2022年 11月 30日 星期三 23:44:37 CST
[root@baimeidashu-02 ~]# date
2022年 11月 30日 星期三 23:44:52 CST
-- 核心确认主从节点时间信息同步
# 确认多个复制节点的版本信息一致
[root@baimeidashu-01 ~]# mysql -V
mysql Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)
[root@baimeidashu-02 ~]# mysql -V
mysql Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)
-- 部分实际应用场景中可以支持不一致,但是复制源端可以是低版本,复制目标端可以是高版本,反之不行;
操作步骤05:创建主从数据同步的用户信息
# 在主库上创建复制同步数据用户
mysql> create user repl@'192.168.30.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to repl@'192.168.30.%';
Query OK, 0 rows affected (0.00 sec)
-- 从库会利用主库上的同步数据用户,进行数据同步传输操作
操作步骤06:进行从库部分数据信息的同步
# 可以将主库上的部分数据在从库上先进行同步
[root@baimeidashu-01 ~]# mysqldump -uroot -A -S /tmp/mysql3307.sock --master-data=2 --single-transaction >/tmp/full.sql
-- 在3307主库上进行数据的全备(模拟企业环境的历史数据全备)
[root@baimeidashu-01 ~]# mysql -S /tmp/mysql3308.sock
mysql> source /tmp/full.sql;
-- 在3308从库上进行数据的恢复(模拟企业环境的历史数据恢复)
-- 将原有主机的数据先备份,然后从库中进行恢复一部分数据,随后再进行数据信息同步追加
-- 可以利用同步方式有很多:mysqldump xtrabackup clone_plugin
操作步骤07:配置主从节点数据复制的信息
# 设置从库连接主库信息,定义从库连接主库同步位置点自动复制
mysql> help change master to
-- 获取连接主库,以及定义同步位置点的数据库配置模板信息
[root@baimeidashu-01 ~]# vim /tmp/full.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=681;
-- 通过备份文件获取同步位置点信息
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.30.101',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3307,
MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=681,
MASTER_CONNECT_RETRY=10;
-- 以上配置主从同步信息在从库进行执行;
操作步骤08:激活主从节点数据复制的线程
# 利用相应线程实现主从数据库的数据同步复制
mysql> start slave;
-- 在从库上激活数据复制同步功能
# 若此时数据同步失败可以重新开启同步功能
mysql> stop slave;
mysql> reset slave all;
-- 在从库上重置数据复制同步功能,重新配置change master to信息,然后重新激活同步复制功能;
# 进行核实主从同步功能是否实现
[root@baimeidashu-01 ~]# mysql -S /tmp/mysql3307.sock
mysql> create database baimeidashu;
-- 在主库模拟创建数据信息
[root@baimeidashu-01 ~]# mysql -S /tmp/mysql3308.sock
mysql> show databases;
-- 在从库模拟查看数据信息(确认是否同步数据)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 192.168.30.101
Master_User: repl
Master_Port: 3307
Connect_Retry: 10
Master_Log_File: binlog.000003
Read_Master_Log_Pos: 869
Relay_Log_File: baimeidashu-01-relay-bin.000002
Relay_Log_Pos: 509
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-- 从库上查看数据同步状态情况,看到上面的两个Yes信息,就表示主从数据同步功能设置成功了