MySQL主从复制配置

iml系统构建时,采用MySQL数据库。数据库层面实现主从复制,服务端实现读写分离。主数据库用于数据库写入,从数据库用于数据读取。

本地环境通过单机多实例进行开发,MySQL通过压缩版本进行安装

  • MySQL版本:mysql-5.7.21-winx64官网
  • 数据库客户端:Navicat Premium,版本:12.0.24(64-bit)官网

安装

配置文件my.ini

解压两份MySQL安装包,路径分别为D:\mysql-masterD:\mysql-master

新增MySQL配置文件my.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
# 跳过授权,忘记密码时使用
#skip-grant-tables

# 设置33061端口
port = 33061

# 设置mysql的安装目录
basedir=D:\mysql-master

# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-master\data

# 允许最大连接数
max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

安装服务

通过管理员进入cmd,进入D:\mysql-master\bin目录,执行以下命令进行安装

1
2
3
4
5
6
7
8
# 数据库初始化
mysqld --initialize --user=mysql --console

# 安装服务
mysqld –install mysql_master

# 启动服务
net start mysql_master

修改root的默认密码

1
2
3
4
5
6
7
8
9
# -h 主机地址 -u 用户名 -p 用户密码 -P 端口号
mysql -uroot -p

# 修改密码
alter user 'root'@'localhost' IDENTIFIED BY 'root'

# 重置密码,配置文件取消注释skip-grant-tables
use mysql
update user set authentication_string=password('root') where user = 'root'

以上述同样的方式创建实例mysql-slave,需要修改产品安装路径、端口号(33062)及服务名称(mysql-slave)。

主从配置

配置主库

先修改主数据库的配置文件my.ini,在[mysqld]下增加以下内容:

1
2
3
4
5
6
7
8
9
10
11
# 服务器id
server-id=10

# 二进制日志的文件存放路径
log-bin=D:\mysql-master\data\mysql-bin

# 需要备份数据库的二进制日志
binlog-do-db=iml

# 也可以直接设置哪些数据库不同步
#binlog-ignore-db=...

配置文件修改后需要重启服务,然后增加用于从库使用的用户

1
2
3
4
5
# repl用户必须具有REPLICATION SLAVE权限
create user repl

# %指明repl用户登录IP,%标识通配符
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'mysql';

查询主数据库状态

1
2
# 记录File、Position字段,用于配置从数据库(类似:mysql-bin.000001、1595)
SHOW MASTER STATUS;

配置从库

先修改从库的配置文件my.ini,在[mysqld]下增加以下内容:

1
2
3
4
5
# 服务器id
server-id=20

# 记录主从同步日志
relay-log=D:\mysql-slave\data\mysql-relay-bin

然后重启服务后,配置主库信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CHANGE MASTER TO 

# 主库IP
MASTER_HOST = 'localhost',

# 端口号
MASTER_PORT = 33061,

# 用户名
MASTER_USER = 'rep1',

# 密码
MASTER_PASSWORD = 'repl',

# 主库的日志文件
MASTER_LOG_FILE = 'mysql-bin.000001',

# 主库状态的Position字段
MASTER_LOG_POS = 154;

后续通过以下命令进行控制:

1
2
3
4
5
6
7
8
9
10
11
# 启动
start slave

# 停止
stop slave

# 重置
reset slave

# 显示状态信息
show slave status