学而实习之 不亦乐乎

MySQL 主从复制搭建

2024-04-20 21:06:24

主从复制搭建过程可分为四大步骤,包括准备服务器、配置主库、配置从库和测试。

一、准备服务器

服务器示例

10.0.38.72(master)
10.0.38.72(slave)

1. 首先判断是否要和公司其他已经安装好的 MySQL 保持版本一致。

2. 如果不是实验新功能性质,则不选择 development release,而是安装 General Availability(GA)release(代表稳定版本,可在生产系统使用)。

准备好两台服务器之后,在上述两台服务器中分别安装好 MySQL,并完成基础的初始化准备工作。

二、配置主库

1. 修改配置文件/etc/my.cnf

# mysql服务ID,保证整个集群环境中唯一,取值范围1~2^32-1,默认为1。
server-id=1

# 是否只读,1代表只读,0代表读写
read-only=0

# 忽略的数据,指不需要同步的数据库
binlog-ignore-db=mysql_001

# 指定同步的数据库
binlog-do-db=db01

2. 登陆 MySQL,创建远程登陆链接的账号,并授予主从复制的权限

# 创建kingdee_test用户,并设置密码,该用户可在任意主机链接该mysql服务。
mysql> create user 'kingdee_test'@'%' identified with mysql_native_password by 'Root@123456';

# 为'kingdee_test'@'%' 用户分配主从复制权限。
mysql> grant replication slave on *.* to 'kingdee_test'@'%';

3. 通过指令,查看二进制日志坐标

mysql> show master status

三、配置从库

1. 修改配置文件/etc/my.cnf

# mysql服务ID,保证整个集群环境中唯一,取值范围1~2^32-1,和主库不一样即可。
server-id=2

# 是否只读,1代表只读,0代表读写
read-only=1

2. 登陆 MySQL,设置主库配置

mysql> change replication source to source_host='10.0.38.72', source_port=8307,source_user='kingdee_test',source_password='Root@123456',source_log_file='mysql_bin_1.000004',source_log_pos=1804;

参数说明如下:

  • source_host:主库IP地址
  • source_port:连接主库的端口号
  • source_user:连接主库的用户名
  • source_password:连接主库的密码
  • source_log_file:binlog日志文件名
  • source_log_pos:binlog日志文件位置

3. 开启同步操作

mysql> start replica;

4. 查看主从同步状态

mysql> show replica status;

四、测试主从复制

1. 查看 GTID 状态

mysql> show  variables like '%gtid%';

2. 在主库上创建数据库、表,并插入数据

mysql> create database kingdee_cosmic ,use kingdee_cosmic;CREATE TABLE `t_sec_user` (  `id` INT NOT NULL,  `namebase` VARCHAR(15) NOT NULL,  `sex` VARCHAR(5) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci INSERT INTO t_sec_user(id,namebase,sex) VALUES(1,'Tom', '1'),(2,'Trigger', '0'),(3,'Dawn','7');

3. 在从库中查询数据,验证主从是否同步

mysql> show database;

五、总结

  1. 主从复制是指将主库的数据变更同步到从库,从而保证主库和从库数据一致,可用于数据备份、失败迁移、读写分离、降低单库读写压力等场景;
  2.  MySQL 主从复制分类包括异步复制、同步复制、半同步复制;
  3.  主从复制原理为:1)主库汇报数据变更记录在二进制日志文件 binlog 中;2)从库连接主库,读取 binlog 日志,并写入自身中继日志 Relay log;3)slave 重做中继日志,改变反映它自身的数据。