数据库系列——MySQL主从复制配置

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,(选择你自己的安装路径)需要管理员权限执行命令:

mysqld --initialize --console

控制台会打印出密码,请记住初始化密码,如果忘记把根目录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、测试同步效果:

猜你喜欢

转载自blog.csdn.net/Coder_Boy_/article/details/110950347
今日推荐