数据库主从复制

先本机模拟实现数据库主从复制。(本次使用MySql数据库,数据库版本5.7.25)

实现步骤:

​1、安装第二个MySql数据库

​2、配置数据库

​3、在SpringBoot里实现数据库主从复制

1、由于没有其他服务器,先使用本地安装两个数据库进行模拟数据库主从复制。

​(1)先停止本地MySql服务。

0377605c70884ff456159041acecfee4.png

​(2)将本机的MySql文件夹拷贝一份,重命名为mysql2。

677f749e65092e2f1570380cfb8a9119.png

​(3)然后进入Mysql2文件夹,删除掉data目录,然后打开my.ini修改端口号,里面的Basedir,datadir也要修改。

829d8c7bb488de09d8d79e6cfd9acf31.png

修改的内容如下:

829d8c7bb488de09d8d79e6cfd9acf31.png

配置内容需要的可以复制:

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_general_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_general_ci

skip-character-set-client-handshake

#以上是修改MySQL为utf-8的操作#

数据库的解压位置,修改为自己的(最好不要放到有空格的路径中)

basedir=G:\\tools\\mysql2

数据库的数据文件存放目录,修改为自己的(最好不要放到有空格的路径中)

datadir=G:\\tools\\mysql2\\data

max_connections = 2000

port=3307

server-id = 2

log-bin=mysql-bin

relay-log = mysql-relay-bin

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

​(4)开始执行安装和添加服务

​4.1 以管理员身份运行命令行窗口

2c4c8a8f3d50f96a6841b80eae42089f.png

​4.2命令行进入mysql2里的bin目录

a6548551429aa2a9ef87357e210e18af.png

​4.3 安装mysql服务,指定该mysql服务名为mysql2,并指向my.ini文件进行安装

mysql2\bin>mysqld install mysql2 --default-file="G:\tools\mysql2\my.ini"

成功安装后会提示:

Service successfully installed.

​然后就可以在任务管理器服务中看到mysql2

8a3e7a865c587f7e033a4a1877aa5934.png

​4.4 数据库安装成功后,还需要进行初始化,才能使用

​在bin目录下执行如下命令

G:\tools\mysql2\bin>mysqld

​执行成功后,mysql2文件夹就会自动生成data目录

ab95a049aafd52f53b9fbbd98970e5cc.png

​4.5 打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql2目录,修改ImagePath的值为G:\tools\mysql2\bin\mysqld mysql2

​先打开注册表

8b8e9728fbe62fc2b1dcaba9504d76ec.png

​然后找到计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql2目录,修改ImagePath值。

f005cf7a5f2b3ce399d159de32311401.png

​5、启动数据库,修改数据库密码

​使用net start mysql2 命令启动mysql2服务

G:\mysql2\bin>net start mysql2

mysql2 服务正在启动 .

mysql2 服务已经启动成功。

​(若mysql2 启动失败,请检查自己是否已经停止了之前的mysql服务,见第一步)

​mysql2服务启动之后,可以进入data目录,查看XX.err文件中找到临时密码

1a16d77163d3d1dae586b9c0f9989ffc.png

​然后使用临时密码登录

C:\Users\loimh>mysql -P 3307 -u root -p

Enter password: ***** (输入临时密码)

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 84

Server version: 5.7.25-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

​修改密码

mysql> set password for root@localhost=password('mysql');

Query OK, 0 rows affected, 1 warning (0.00 sec)

​然后quit退出,用新密码登录。

2、配置两个数据库实现主从复制。

​2.1 新建一个测试数据库(主从数据库都要新建)

CREATE DATABASE `task_db`;

USE `task_db`;

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (

`id` int(4) NOT NULL AUTO_INCREMENT,

`name` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

insert into `tb_user`(`id`,`name`) values (1,'刘一'),(2,'陈二'),(3,'张三'),(4,'李四'),(5,'王五');

​2.2 修改主库master

​2.2.1 修改my.ini文件,大家可以直接复制我的

server-id = 1 # 节点ID,确保唯一

# log config

log-bin = mysql-bin #开启mysql的binlog日志功能

sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全

binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed

expire_logs_days = 7 #binlog过期清理时间

max_binlog_size = 100m #binlog每个日志文件大小

binlog_cache_size = 4m #binlog缓存大小

max_binlog_cache_size= 512m #最大binlog缓存大

binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行

auto-increment-offset = 1 # 自增值的偏移量

auto-increment-increment = 1 # 自增值的自增量

slave-skip-errors = all #跳过从库错误

​然后重启master数据库服务。

​2.2.2 接下来创建一个用于同步的账号,也可以不进行这一步,直接使用root用户。

#创建用户:allowsalve,密码为:123456,并授权。

GRANT REPLICATION SLAVE ON *.* TO 'allowsalve'@' 172.18.237.231' IDENTIFIED BY '123456';

#刷新用户权限

flush privileges;

​2.2.3查看主节点(master)的状态

show master status;

5d5712c7caf76e2a779f724923182448.png

​2.3 配置从数据库(slave)

​2.3.1 先修改从数据库的配置文件my.ini,大家可以直接复制我的

server-id = 2

log-bin=mysql-bin

relay-log = mysql-relay-bin

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

​修改完配置记得重启服务才能生效。

​2.3.2 从数据库执行执行链接主服务器命令

MASTER_LOG_FILE和MASTER_LOG_POS的值是通过刚才查询主库状态得到的:

5d5712c7caf76e2a779f724923182448.png

CHANGE MASTER TO

MASTER_HOST = '172.17.0.3',

MASTER_USER = 'root', #master数据库用户

MASTER_PASSWORD = '******', #master数据库用户密码

MASTER_PORT = 3306,

MASTER_LOG_FILE='mysql-bin.000002',

MASTER_LOG_POS=120,

MASTER_RETRY_COUNT = 6992,

MASTER_HEARTBEAT_PERIOD = 10000;

# MASTER_LOG_FILE='mysql-bin.000005',#与主库File 保持一致

# MASTER_LOG_POS=120 , #与主库Position 保持一致

​2.3.3 启动从库slave进程

mysql> slave start; #启动从库slave进程

Query OK, 0 rows affected (0.04 sec)

​2.3.4 查看状态(当Slave_IO_Running、Slave_SQL_Running)同为yes即为启动成功。

#查看从节点(slave)状态

show slave status\G;

0342f7b8ad99cd937253fdb8e675911a.png

2.4 效果展示

​2.4.1 查看主节点以及从节点状态

#主节点(master)

show master status;

#从节点(slave)

show slave status\G;

f946c15ddc4d6aa9c3874a4487324e44.png

2.4.2 查询主节点(master)与从节点(slave)中同步的数据库信息、确认数据一致。

#选中数据库

use task_db;

#查看当前数据库中所有的表

show tables;

#查询tb_user表数据信息

select * from tb_user;

bde9a43a91a6798f2dd99563130ae96e.png

2.4.3主节点(master)新增表数据、确认从节点(slave)是否准实时同步

#主节点(master)添加两台新数据

insert into tb_user(name) values('赵六'),('孙七');

#从节点(slave)查看新的表数据

select * from tb_user;

同步成功

f5750933201c2014f576ccfc4b554291.png

2.4.4 主节点(master)新建表、查看从节点(slave)数据库表的状态

#主库(master)创建新表tb_dept

CREATE TABLE tb_dept(

id INT(4) PRIMARY KEY,

NAME VARCHAR(20)

);

#查看从库(slave)中所有表

show tables;

同步成功

d72668fa3b0080a53afd3c6f4d7cdd5d.png

至此,主从数据库配置完成。

SpringBoot实现读写分离

我们接下来在Springboot中使用数据库主从复制实现读写分离,操作数据时操作主表,查询操作使用从表。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐