欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-19 16:10:25
1、背景一个项目中数据库最基础同时也是最主流的是单机数据库,读写都在一个库中。当用户逐渐增多,单机数据库无法满足性能要求时,就会进行读写分离改造(适用于读多写少),写操作一个库,读操作多个库,通常会做一个数据库集群,开启主从备份,一主多从,以提高读取性能。当用户更多读写分离也无法满足时,就需要分布式数据库了(可能以后会学习怎么弄)。正常情况下读写分离的实现,首先要做一个一主多从的数据库集群,同时还需要进行数据同步。这一篇记录如何用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;语句查看主库状态,如下所示:

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

 

从库配置

同样先新增几行配置:

[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。

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

 

可以用这个步骤开启多个从库。

  默认情况下备份是主库的全部操作都会备份到从库,实际可能需要忽略某些库,可以在主库中增加如下配置:

# 不同步哪些数据库
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 

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

解压,复制一份。分别新建my.ini文件。

 

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

 

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

 

数据库系列——MySQL主从复制配置 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、配置文件的配置

主库:

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

从库: 

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

 

2、启动配置

主库配置

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'  ;

CREATE USER 'repl_user'@'%' IDENTIFIED BY '123456'


SHOW SLAVE STATUS

USE test

SHOW MASTER STATUS 

 

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

 

从库配置:


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

 

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

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

也可以同过命令行查看

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

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

3、测试同步效果:

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

 

本文地址:https://blog.csdn.net/Coder_Boy_/article/details/110950347