springboot mysql 主从_基于Docker实现MySQL的主从复制和SpringBoot2+MyBatis的动态切换数据源的读写分离...

1)从Docker官方下拉MySQL的image

docker search mysql

docker pull mysql

2)设置目录   ---  将MySQL数据保存到当前主机上

建立MySQL数据存储目录

mkdir -pv /Users/pintec/jay/db_test

建立主服务器的配置目录

mkdir -pv /Users/pintec/jay/db_test/mysql/101

建立从服务器的配置目录

mkdir -pv /Users/pintec/jay/db_test/mysql/102

3)设置主从服务器配置

vi /Users/pintec/jay/db_test/mysql/101/101.cnf

[mysqld]

log-bin=mysql-bin //[必须]启用二进制日志

server-id=101 //[必须]服务器唯一ID,默认是1,一般取IP最后一段

1

2

3

vi /Users/pintec/jay/db_test/mysql/101/102.cnf

[mysqld]

log-bin=mysql-bin

server-id=102

4)  启动MySQL容器

//创建2个MySQL容器

docker create --name mysqlsrv101 -v /Users/pintec/jay/db_test/mysql/101:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql

docker create --name mysqlsrv102 -v /Users/pintec/jay/db_test/mysql/102:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql

或指定数据保存到本地

docker create --name mysqlsrv101 -v /Users/pintec/jay/db_test/mysql101:/var/lib/mysql -v /Users/pintec/jay/db_test/mysql/101:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql

docker create --name mysqlsrv102 -v /Users/pintec/jay/db_test/mysql102:/var/lib/mysql -v /Users/pintec/jay/db_test/mysql/102:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql

#根据容器名,启动容器

docker start mysqlsrv101

docker start mysqlsrv102

5)配置MySQL主从服务器

登录主服务器 3307,查询master状态,注意查出的Position(从服务器master_log_pos要用),授权用户:backup,密码:root

show master status;

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

GRANT REPLICATION SLAVE ON.* to 'backup'@'%' identified by 'root';

c393aa0a04fcbea5f6abf111805ae842.png

登录从服务器的3308,设置与主服务器相关的配置参数

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

change master to master_host='192.168.208.84', master_port=3307,master_user='backup',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=154;

9c7f3e297d2539f6c8f49e4d7ed4a637.png

注意:

master_host为docker的地址不能写127.0.0.1

master_user是在主库创建的用户

master_log_pos是主库show master status;查询出的Position

Waiting for master to send event 就是成功了

Connecting to master 多半是连接不通

之后主库的修改都能同步到从库了

6)主服务器创建数据库,并创建数据

主服务器创建数据库jay_db1

执行SQL:

DROP TABLE IF EXISTS `person`;

CREATE TABLE `person` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`address` varchar(255) COLLATE utf8_bin DEFAULT NULL,

`age` int(11) DEFAULT NULL,

`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,

PRIMARY KEY (`id`)

) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

从服务器会自动复制db和内容

51d805dcd0981eba4ae4cb08519ffd79.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值