docker+mysql数据库配置主从复制

docker+mysql数据库主从复制

主库安装

1. 创建配置文件
  • 创建目录
    mkdir -p /opt/mysql/master/conf
  • 创建my.cnf文件
    vim /opt/mysql/master/conf/my.cnf
  • my.cnf文件内容
[client]
  default-character-set=utf8
  [mysql]
  default-character-set=utf8
  [mysqld]
  collation-server = utf8_unicode_ci
  init-connect='SET NAMES utf8'
  character-set-server = utf8
  pid-file= /var/run/mysqld/mysqld.pid
  socket = /var/run/mysqld/mysqld.sock
  datadir = /var/lib/mysql
  secure-file-priv= NULL
  symbolic-links=0
  skip-character-set-client-handshake
  
  binlog_format=ROW
  binlog_rows_query_log_events=1
  server_id = 1
  log-bin= mysql-bin
  gtid_mode=on
  enforce_gtid_consistency=ON
  master_info_repository=TABLE
  relay_log_info_repository=TABLE
  relay_log_recovery=ON
  sync_master_info=1
  binlog_checksum=CRC32
  
  slave-parallel-type=LOGICAL_CLOCK
  slave_parallel_workers=4
  binlog_transaction_dependency_tracking=WRITESET_SESSION
  transaction_write_set_extraction=XXHASH64
  
  transaction-isolation=READ-COMMITTED
  read-only=0
  replicate-ignore-db=mysql
  replicate-ignore-db=sys
  replicate-ignore-db=information_schema
  replicate-ignore-db=performance_schema
  expire_logs_days=30
  
  max_connections=3600
  
  \# Custom config should go here
  !includedir /etc/mysql/conf.d/

2. 启动容器

docker run -d -p 3306:3306 --name mysql-m -v /opt/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /opt/mysql/master/data/mysql:/var/lib/mysql -v /opt/mysql/
master/log:/opt/mysql/log -e MYSQL_ROOT_PASSWORD=test1148 --restart=always mysql:5.7.29

3. 主库创建用于同步的账号
  • 进入docker容器内
    docker exec -it mysql-m bash
  • 登录mysql
    mysql -uroot -p
  • 创建backup账号
    GRANT REPLICATION SLAVE ON . to ‘backup’@’%’ identified by ‘123456’;

操作从数据库

“keepalived、heartbeat”暂时没时间搞,有时间补上
主从切换参考博客:https://www.cnblogs.com/zping/p/5283912.html

1. 创建配置文件
  • 创建目录
    mkdir -p /opt/mysql/slave/conf
  • 创建my.cnf文件
    vim /opt/mysql/slave/conf/my.cnf 内容如下
  • my.cnf内容
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
pid-file= /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir= /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
skip-character-set-client-handshake

binlog_format=ROW
binlog_rows_query_log_events=1
server_id = 2
log-bin= mysql-bin
gtid_mode=on
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
sync_master_info=1
binlog_checksum=CRC32

slave-parallel-type=LOGICAL_CLOCK
slave_parallel_workers=4

binlog_transaction_dependency_tracking=WRITESET_SESSION
transaction_write_set_extraction=XXHASH64

transaction-isolation=READ-COMMITTED
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
expire_logs_days=30

max_connections=3600

\# Custom config should go here
!includedir /etc/mysql/conf.d/
2.启动容器

docker run -d -p 3307:3306 --name mysql-m -v /opt/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /opt/mysql/master/data/mysql:/var/lib/mysql -v /opt/mysql/
master/log:/opt/mysql/log -e MYSQL_ROOT_PASSWORD=test123 --restart=always mysql:5.7.29

3.关联主库
  • 进入docker容器内
    docker exec -it mysql-s bash

  • 登录mysql数据库
    mysql -uroot -p

  • 执行关联master语句
    change master to master_host=‘192.168.28.130’,master_port=3306,master_user=‘masterming’,master_password=‘123456’,MASTER_AUTO_POSITION=1;

  • 启动slave
    start slave;

  • 查看slave的状态
    show slave status\G
    在这里插入图片描述
    在这里插入图片描述
    这俩都是yes证明配置正确。

  • 创建从库的普通用户
    read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作,所以需要另外创建普通账号来操作从库。
    GRANT select,insert,update,delete,create,drop,alter ON . to ‘slaveming’@’%’ identified by ‘1q2w3e4r’;

主库查看同步信息

1. 登录主库
  • 查看binlog线程,执行以下语句查看正在执行的线程
    show processlist;
    在这里插入图片描述
  • 查看所有从库信息
    show slave hosts;
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值