docker离线版安装mysql8.0及主从备份

1、导入mysql8镜像

docker load -i mysql8.tar

2、创建主节点

docker run -id --name=mysql-master  -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -e TZ=Asia/Shanghai -v /etc/mysql/master/config:/etc/mysql/conf.d -v /etc/mysql/msater/data:/var/lib/mysql mysql:8.0

3、在/etc/mysql/master/config创建配置文件my.cnf

# 文件名必须为my.cnf   不能为mysqld.cnf
touch /etc/mysql/master/config my.cnf  

主节点配置文件(仅供参考)

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
# log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=0
 
init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
[client]
default-character-set=utf8mb4
 
 
[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
## 设置server_id,同一局域网中需要唯一
server_id=1002
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
### 开启二进制日志功能
log-bin=mysql-bin  
### 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
### 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=row  
### 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
### 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
### 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062 
skip_name_resolve=1
skip_symbolic_links=1

4、重启主节点并进入主节点容器

 docker restart mysql-master
 docker exec -it mysql-master bash

5、进入mysql

mysql -uroot -p

输入密码进入后执行以下sql创建从节点用户

use mysql;
CREATE USER 'slave'@'%' IDENTIFIED with mysql_native_password  BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;

查看主节点状态

show master status;

在这里插入图片描述

记录下file、position

6、退出主节点容器,创建从节点容器

# 注意映射的目录不可以与主节点一致,否则容器报错启动不了
docker run -id --name=mysql-slave  -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -e TZ=Asia/Shanghai -v /etc/mysql/slave/config:/etc/mysql/conf.d -v /etc/mysql/slave/data:/var/lib/mysql mysql:8.0

7、在/etc/mysql/slave/config创建my.cnf配置文件
从节点配置文件(仅供参考)

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
# log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
 
 
#[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
## 设置server_id,同一局域网中需要唯一
server_id=102
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=row  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062  
## relay_log配置中继日志
relay_log=mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1
skip_name_resolve=true
skip_symbolic_links=true
rpl_semi_sync_slave_enabled=1
 
[client]
default-character-set=utf8mb4

8、重启从节点,进入从节点容器,进入mysql(不再赘述)

9、执行sql

-- host为主节点容器的IP地址
-- user为刚刚在主节点创建的用户
-- password主节点用户密码
-- port主节点的端口
-- log_file 刚刚在主节点执行show master status 时打印出来的file字段
-- log_pos刚刚在主节点执行show master status 时打印出来的position字段
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=617, master_connect_retry=10;

10、查看主从同步状态

在从节点mysql内执行show slave status;
Slave_IO_Running、Slave_SQL_Running为yes时才表示主从同步已开启
在这里插入图片描述

在docker下Slave_IO_Running 一直为connecting或NO基本上是配置文件映射错了,请仔细检查!!!!

11、开启mysql半同步模式(只讲做法,不讲原理,原理请移步mysql官网)

推荐使用连接工具直接连接主库与从库操作,避免来回用命令操作容器,麻烦。

①主节点需要安装rpl_semi_sync_master插件,默认情况下是需要手动安装的
install plugin rpl_semi_sync_master soname 'semisync_master.so';


如果报这个错就说明已经安装过了
在主节点配置文件增加这一行配置

rpl_semi_sync_master_enabled=1

加好后重启主节点容器

②从节点需要安装rpl_semi_sync_slave插件,默认情况下是需要手动安装的
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

在从节点配置文件增加这一行配置

rpl_semi_sync_slave_enabled=1

加好后重启从节点容器
③在主节点执行sql

show status like '%rpl_semi%';

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值