基于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';





登录从服务器的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;


注意:
      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和内容









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值