文章目录
  1. 1. mysql主(称master)从(称slave)复制的原理:
  2. 2. 准备工作
  3. 3. master配置
  4. 4. slave配置
  5. 5. 主从复制配置
  6. 6. 测试

利用MySQL主从配置,实现读写分离,减轻数据库压力。条件有限,本篇使用binlog的方式,只在一台windows上实验ok。方法记录如下:

mysql主(称master)从(称slave)复制的原理:

1.master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)
2.slave将master的binary log events拷贝到它的中继日志(relay log)
3.slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)

准备工作

1.mysql5.7版本下载与安装
2.安装navicat,来链接数据库,方便观察操作数据库(下载安装后网上有破解教程,此篇亲测可用,注册机下载

master配置

修改my.ini文件,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[client]
port=3380
default-character-set=utf8
[mysqld]
port=3380
shared-memory-base-name=MYSQL-3380
character_set_server=utf8
#安装路径
basedir=D:\mysql
#数据路径
datadir=D:\mysql\data\Data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
slow_query_log_file="D:\mysql\logs\mysql-slow.log"
log-bin="D:\mysql\logs\mysql-bin"
log-error="D:\mysql\logs\mysql.err.log"
server-id=80
binlog-do-db=coolshop
[WinMySQLAdmin]
D:\mysql\bin\mysqld.exe

输入服务安装命令:
mysqld install MySQL-3380 --defaults-file="D:\mysql\my.ini"
# 注意:MySQL-3380服务名,与下面slave区分,my.ini指向自己master安装路径下的。
见到Service successfully installed说明安装成功。

启动master服务,由于my.ini配置是3380端口,所以服务中会显示此服务,同时可以使用navicat链接上该mysql。
#此上步骤注意:binlog-do-db=coolshop 配置意思是coolshop此数据库会进行主从的复制,其他数据库不会,我也是最后测试半天不生效恍然看到才明白的。其他主要是注意文件里端口号,路径不要写错,根据实际mysql安装目录来。

slave配置

将上一步安装的mysql文件夹拷贝一份,修改文件名,然后同样按照上述步骤操作,主要还是my.ini文件的修改,贴上我的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[client]
port=3381
default-character-set=utf8
[mysqld]
port=3381
shared-memory-base-name=MYSQL-3381
character_set_server=utf8
#安装路径
basedir=D:\mysql_c
#数据路径
datadir=D:\mysql_c\data\Data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
slow_query_log_file="D:\mysql_c\logs\mysql-slow.log"
#log-bin="D:\mysql_c\logs\mysql-bin"
log-error="D:\mysql_c\logs\mysql.err.log"
server-id=81
[WinMySQLAdmin]
D:\mysql_c\bin\mysqld.exe

#注意:端口号区分,文件路径区分,我copy的mysql放在d盘下名字为mysql_c,所以如上所写,shared-memory-base-name区分

输入服务安装命令:
mysqld install MySQL-3381 --defaults-file="D:\mysql_c\my.ini"
同上,至启动MySQL-3381服务ok,能链接上数据库。

主从复制配置

1.主:SHOW MASTER STATUS

2.从:CHANGE MASTER TO
master_host=’127.0.0.1’,
master_user=’root’,
master_password=’123456’,
master_port=3380,
master_log_file=’mysql-bin.000004’,
master_log_pos=6147;
#注意:此处的最后两个参数是要和master上面查询的配置一致,也可以在主库创建用户,授予复制权限来操作,此处也要对应用户名和密码,授权用户命令如下:

1
2
grant replication slave on *.* to 'slave01'@'127.0.0.1' identified by '123456';
flush privileges;

3.启动slave同步:START SLAVE;
4.查看slave同步状态:SHOW SLAVE STATUS;注意Slave_IO_Running这一栏,若为NO,说明配置有问题,查看mysql.err.log日记发现是:master and slave have equal MySQL server UUIDs;
5.所以在slave里修改auto.cnf文件里的uuid,然后重启下slave数据库,查询slave状态,会发现Slave_IO_Running:yes即ok。

测试

此时注意不是所有的master中数据库都会同步复制到slave数据库里面,而是master中的coolshop数据库,之前配置的。在master中创建该数据库,创建表,插入数据等,然后回到slave中查看databases,你会发现slave已同步有了此数据库以及数据。

文章目录
  1. 1. mysql主(称master)从(称slave)复制的原理:
  2. 2. 准备工作
  3. 3. master配置
  4. 4. slave配置
  5. 5. 主从复制配置
  6. 6. 测试