最近在学习ShardingSphere的分库分表和读写分离,其中读写分离部分涉及到MySql的主从复制,实验成功后在这里记录一下配置流程!
一、读写分离概念
1、读写分离原因:
首先读写分离字面意思就是将数据库的读写操作分开,数据库写操作全部在主数据库完成,随后MySql将数据主从复制后,所有读操作均在从数据库进行完成。因为数据库读操作比较很节省时间,但是写操作非常较耗时,此时如果将数据库读写分开操作进行,就可以避免写入操作时影响读取速度。
2、读写分离原理:
Mysql读写分离首先需要将以前的但数据库改为多数据库之间主从复制,即:一个主数据库用于写入数据,一个会或多个从数据库读取数据。
而主从复制的原理利用到了mysql中的binlog文件,从数据库监控主数据库的binlog文件,从而实现数据同步。
二、MySQL主从复制配置
现在让我们简单配置一下mysql的主从复制
1、复制数据库实例至3307端口
因为我们在单机进行测试配置,所以我们先将mysql进行复制,在3307端口新建数据库实例!
第一步:先复制mysql文件
首先我的Mysql目录如下:
第一步直接复制mysql的所有文件(包括数据文件与数据库本身),因为我们要在3307端口新建实例,所以我们取一个比较好区分的名字3307。
第二步:修改配置文件my.ini
打开刚刚新复制的数据库主文件,修改my.ini文件中内容,重新指定mysql安装目录和数据存放目录。
[mysqld]
# 设置3307端口
port = 3307
# 设置mysql的安装目录
basedir=D:\work\mysql\MySQL-3307
# 设置mysql数据库的数据的存放目录
datadir= D:\work\mysql\Data-3307
# 设置数据库ID(主库与从库不重复即可)
server_id = 2
第三步:在windows中安装数据库服务
在配置完成后,我们就需要将新数据库安装到windows服务中以便于我们日后的使用!
mysqld install mysql3307 --defaults-file="D:\work\mysql\MySQL-3307\my.ini"
注意:
- 一定要使用管理员权限安装
- 要切换到数据库文件的bin目录下
- mysql3307为windows服务的名称,可以修改
- 安装时要指定刚刚修改的配置文件,my.ini
可以看到成功安装!
如果我们安装错误,还可以使用如下命令删除windows服务,删除后重新安装即可!
sc delete 服务名称
因为新的数据库文件为之前的数据库文件复制而来,所以用户名密码等其他设置完全相同,测试联接即可!
至此新建数据库操作已全部完成!
2、配置主从复制
接下来让我们分别设置两个数据库,开启主从复制
第一步:开启数据库Log
分别在主数据库,从数据库开启数据库binlog,并设置不同的数据库ID
log-bin=mysql-bin
server_id=1
注意:log-bin选项必须配合server_id使用,否则会无法启动
第二步:新建账号用于主从复制
我们新建一个账号专门用于数据库主从复制(不新建,使用root账号也可以,但是不规范)
新建/删除账号命令格式:
create user "username"@"host" identified by "password"; #新建
drop user 'username'@'host'; #删除
我们新建一个名为db_sync的账号,并刷新,由于命令比较固定,所以直接复制以下命令即可:
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync'; #新建
FLUSH PRIVILEGES; #刷新
第三步:查看主数据库log文件
账号设置后,我们要查询主数据库的log文件位置:
show master status;
此时我们可以看到,文件为mysql-bin.000004位置592,我们需要记住这个位置,以便于从数据库进行监控。
第四步:设置从数据库的数据同步
注意,以下操作为从数据库的操作
首先停止从数据库的同步操作:
STOP SLAVE;
然后修改主从复制的一些信息:
CHANGE MASTER TO
master_host = 'localhost', #主服务器地址
MASTER_PORT = 3306, #主服务器端口号
master_user = 'db_sync', #同步用户
master_password = 'db_sync', #密码
master_log_file = 'mysql-bin.000004', #日志文件名
master_log_pos = 592; #文件位置
启动复制:
START SLAVE;
注意红色位置的修改!
第五步:查看是否同步成功
使用命令查看数据同步是否成功:
show slave status
如果配置成功,则Slave_IO_Running与Slave_SQL_Running会均为YES(红色剪头),否则为设置失败。
寻找错误日志文件,查找原因(在数据文件夹下的.err文件):
可以看到,因为我数据库是直接复制而来,所以UUID相同,接下来尝试修改:
目录为数据目录下的auto.cnf文件,打开后将UUID修改为不同即可!
重启服务,查看是否同步成功!
此时数据已经同步成功!
第六步:数据插入测试
接下来,我们使用真实数据来测试数据库同步是否成功!
注意:插入操作一定要向主数据库进行,否则会导致数据不同步
数据同步全部完成!
接下来就可以进行读写分离的操作,剩余内容请关注后续文章~
本文章内容全部为我的学习笔记,感谢大家查看~