Docker 环境 MySQL8 主从配置

一 准备工作

1.安装Docker

2.创建数据及配置存放目录

1
2
3
4
5
6
7
8
9
10
# 根据自己的习惯设定存放路径
# 创建主库数据存放目录  mkdir -p代表文件不存在即创建
mkdir -p /home/docker/mysql/master/data
# 创建主库配置存放目录
mkdir -p /home/docker/mysql/master/conf
  
# 创建从库1数据存放目录
mkdir -p /home/docker/mysql/slave1/data
# 创建从库1配置存放目录
mkdir -p /home/docker/mysql/slave1/conf

3.要安装mysql8,必须在之前创建的conf文件夹中先创建my.cnf作为mysql8的配置文件

master库和slave库配置文件my.cnf是几乎一样的,只要server-id不一致即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
  
secure-file-priv= NULL
  
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
<br>port = 3307 # 主库的端口可以使用默认3306,从库的端口必须和主库不一致<br>
# 服务器唯一ID,默认是1, 要和slave库不同
server-id=1
  
# 启用二进制日志
log-bin=binlog 
# 从库追踪主库的日志文件名开头,有些数据库是mysql-bin,有些是binlog,具体可以在主库mysql环境下输入mysql> show master status查看
   
# 最大连接数
max_connections=10000
  
# 设置默认时区,
# default-time_zone='+8:00'
  
# 0:区分大小写
# 1:不区分大小写
# lower_case_table_names=1

4.docker中安装mysql8

主库命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo docker run --name mysql_master \
-d --network=host \
-v /home/docker/mysql/master/data:/var/lib/mysql \
-v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=111111 \
mysql:8
 
注释:
第一行:docker启动后的名字
第二行:docker直接使用服务器的网络端口映射
第三行:docker里面的数据映射到服务器本地的路径
第四行:docker里面加载使用的cnf文件映射到服务器本地的路径
第五行:设置docker中mysql的root初始密码
第六行:docker使用的镜像:版本

从库命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo docker run --name mysql_slave1 \
-d --network=host \
-v /home/docker/mysql/slave1/data:/var/lib/mysql \
-v /home/docker/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=111111 \
mysql:8
 
注释:
第一行:docker启动后的名字
第二行:docker直接使用服务器的网络端口映射
第三行:docker里面的数据映射到服务器本地的路径
第四行:docker里面加载使用的cnf文件映射到服务器本地的路径
第五行:设置docker中mysql的root初始密码
第六行:docker使用的镜像:版本

5.测试远程主从数据库连接状况 

进入docker命令:使用docker名称或者id

1
docker exec -it mysql_master /bin/bash

进入docker后试着进入mysql8,部分数据库可能会出现无法登录的状态,这个需要在上述的mysql配置文件my.cnf 文件中,在[mysqld] ,在其后面添加 skip-grant-tables

同理,从属数据库也是同样的方法测试.

别忘了加入skip-grant-tables后进入mysql重新设置密码后,再flush privileges,之后从my.cnf中再删掉这行skip-grant-tables

6.在主库创建从库访问主库的账户

1
2
3
4
create user 'myslave'@'%' identified by '111111';
grant replication slave on *.* to 'myslave'@'%';
 
# *.*代表所有的数据库

7.查看master机器的状态

1
SHOW MASTER STATUS

 

File栏下的binlog.000103就是从库要追踪的主库的日志文件

position栏的数字就是追踪的起始位置

8.从库设置master信息

进入从库的docker,再进入mysql环境:

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST='192.168.1.175', # 主库的IP地址
MASTER_USER='mysalve', # 主库设置的从库访问用户名
MASTER_PASSWORD='111111', # 密码
MASTER_LOG_FILE='binlog.000103',
MASTER_LOG_POS=28862;

9.开始同步

1
2
3
4
5
# 开始同步
start slave;
  
# 查看同步状态
show slave status \G;

 

 看到两个yes状态就是正常运行状态.

注意:在主库数据在从库进行数据备份,有冷备份和热备份两种,冷备份就是先要锁定主库的数据库,再导出,再导入到从库数据库,这样两个数据库可以保证是在同一个起点,别忘了解锁主库数据,之后主库和从库的数据就完全一致了.

  

 

posted @   EricYJChung  阅读(1064)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示