MySQL数据库配置主从复制

数据库主从复制

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

实现步骤:

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

​ 2、配置数据库

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

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

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

image-20210125105709545

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

image-20210125105936071

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

image-20210125110142717

修改的内容如下:

image-20210125110417542

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

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 以管理员身份运行命令行窗口

image-20210125142050496

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

image-20210125142246120

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

mysql2\bin>mysqld install mysql2 --default-file="G:\tools\mysql2\my.ini"   
成功安装后会提示:
Service successfully installed.

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

image-20210125142719199

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

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

	G:\tools\mysql2\bin>mysqld

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

image-20210125143455877

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

​ 先打开注册表

image-20210125144148378

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

image-20210125144237632

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

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

G:\mysql2\bin>net start mysql2
mysql2 服务正在启动 .
mysql2 服务已经启动成功。

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

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

image-20210125171232665

​ 然后使用临时密码登录

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;

image-20210126150517556

​ 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的值是通过刚才查询主库状态得到的:

image-20210126150517556

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;

image-20210126152602004

2.4 效果展示

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

#主节点(master)
show master status;
#从节点(slave)
show slave status\G;

image-20210126153105334

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

#选中数据库
use task_db;

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

#查询tb_user表数据信息
select * from tb_user;

image-20210126153808793

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

#主节点(master)添加两台新数据
insert into tb_user(name) values('赵六'),('孙七');

#从节点(slave)查看新的表数据
select * from tb_user;

同步成功

image-20210126154059283

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

#主库(master)创建新表tb_dept
CREATE TABLE tb_dept(
id INT(4) PRIMARY KEY,
NAME VARCHAR(20) 
);

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

同步成功

image-20210126154258036

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

SpringBoot实现读写分离

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

posted @ 2021-01-26 16:20  loimh  阅读(160)  评论(0)    收藏  举报