1、背景
以前一个项目中数据库最基础同时也是最主流的是单机数据库,读写都在一个库中。当用户逐渐增多,单机数据库无法满足性能要求时,就会进行读写分离改造(适用于读多写少),写操作一个库,读操作多个库,通常会做一个数据库集群,开启主从备份,一主多从,以提高读取性能。当用户更多读写分离也无法满足时,就需要分布式数据库。(借助MyCat、sharing-jdbc、Canal等等),蚂蚁金服Oceanbase。
正常情况下读写分离的实现,首先要做一个一主多从的数据库集群,同时还需要进行数据同步。这一篇记录如何用mysql搭建一个一主多次的配置,
下一篇记录代码层面如何实现读写分离。
2、搭建一主多从数据库集群
主从备份需要多台虚拟机,如果用wmware完整克隆多个实例,注意直接克隆的虚拟机会导致每个数据库的uuid相同,是需要修改为不同的uuid。
核心配置如下:
主库配置
主数据库(master)中新建一个用户用于从数据库(slave)读取主数据库二进制日志,sql语句如下:
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY '123456';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';#分配权限
mysql>flush privileges; #刷新权限
同时修改mysql配置文件开启二进制日志,新增部分如下:
[mysqld]
server-id=1
log-bin=master-bin #这边写的是对应bin的日志名称
log-bin-index=master-bin.index
然后重启数据库,在主库上使用show master status;
语句查看主库状态,如下所示:
从库配置
同样先新增几行配置:
[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
然后重启数据库,使用如下语句连接主库:
CHANGE MASTER TO
MASTER_HOST='192.168.226.5',
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=6953;
接着在从库上运行start slave;
开启备份,正常情况如下图所示:Slave_IO_Running和Slave_SQL_Running都为yes。
可以用这个步骤开启多个从库。
默认情况下备份是主库的全部操作都会备份到从库,实际可能需要忽略某些库,可以在主库中增加如下配置:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
实战演示
为了方便演示我采用【win10安装多个mysql实例】,原理是一样的
1、下载mysql最新解压版,这里是mysql-8.0.22
解压,复制一份。分别新建my.ini文件。
my.ini内容参考:注意端口的修改
[mysqld]
# 设置3306端口
port=3307
# 设置mysql的安装目录# 切记此处一定要用双斜杠
basedir=D:\\DevPackTool\\InstallPack\\mysql1
# 设置mysql数据库的数据的存放目录
datadir=D:\\DevPackTool\\InstallPack\\mysql1\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=UTF8MB4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#开启binlog
log-bin=mysql-bin
replicate-do-db=test
server-id=3307
[mysql]
# 设置mysql客户端默认字符集
default-character-set=UTF8MB4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=UTF8MB4
2、创建mysql
第一个mysql
cmd进入目录:D:\DevPackTool\InstallPack\mysql1\bin,(选择你自己的安装路径)需要管理员权限执行命令:
|
|
控制台会打印出密码,请记住初始化密码,如果忘记把根目录data文件夹删除,重新执行上面语句。
继续在D:\DevPackTool\InstallPack\mysql1\bin路径里执行创建服务命令,将服务命名为MySQL1:
mysqld --install mysql1
启用服务:
net start mysql1
登录mysql:
mysql -uroot -p
输入密码
更改密码:
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
第二个mysql
和上面一样的原理,之后登录时要注意就是要加上端口号,因为默认是3306,3306已经被MySQL1占用了,MySQL2是3307,登录时需要指定端口:
mysql -uroot -P3307 -p
输入密码
#注意大写-P3307
配置参考上面的,需要在主库和从库上配置。
1、配置文件的配置
主库:
从库:
2、启动配置
主库配置
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' ; CREATE USER 'repl_user'@'%' IDENTIFIED BY '123456' SHOW SLAVE STATUS USE test SHOW MASTER STATUS
从库配置:
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='repl_user', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=5905; START SLAVE; SHOW SLAVE STATUS
也可以同过命令行查看
3、测试同步效果:
本文地址:https://blog.csdn.net/Coder_Boy_/article/details/110950347