docker搭建MySQL主从

目录

1.1 关系引入

1.2 搭建mysql在docker中的环境

1.2.1 查询镜像

1.2.2 拉取镜像

1.3 mysql主从原理

1.4 mysql的主配置

1.4.1 linux创建配置文件、文件夹

1.4.2 查看文件结构

1.4.3 拷贝my.cnf文件到conf文件夹下

1.4.4 查看my.cnf文件(可省略)

1.4.5 进入my.cnf文件修改配置

1.4.6 创建运行mysql主容器(master)

1.4.7 进入容器

1.4.8 在容器中运行mysql客户端

1.4.9 开放指定端口和重新加载防火墙

1.4.10 navicat新建mysql连接并测试

1.5 mysql的从配置

1.5.1 检查binlog是否开启

1.5.2 查看当前mysql容器中的binlog日志文件

1.5.3 查看当前mysql数据库binlog情况

1.5.4 创建与从(slave)服务通信的用户

1.5.6 查询master的状态

1.5.7 获取master容器ip地址

1.5.8 新建配置文件夹

1.5.9 拷贝my.cnf文件到conf文件夹下

1.5.10 进入my.cnf文件修改配置

1.5.11 创建运行mysql从容器(slave01)

1.5.12 进入容器

1.5.13 在容器中运行mysql客户端

1.5.14 修改从(slave)服务器与master关联

1.5.15 开启slave

1.5.16 查询slave状态

1.5.17 开放指定端口和重新加载防火墙

1.5.18 navicat新建mysql连接并测试

1.5.19 测试主从


1.1 关系引入

【示意图:mysql和docker和操作系统之间的关系】

1.2 搭建mysql在docker中的环境

1.2.1 查询镜像

【命令:查询镜像】

docker search 镜像名称

【示例】

[root@localhost ~]# docker search mysql
NAME                            DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   14273     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5455      [OK]       
percona                         Percona Server is a fork of the MySQL relati…   617       [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   831       [OK]       
bitnami/mysql                   Bitnami MySQL Docker Image                       90                   [OK]
circleci/mysql                  MySQL is a widely used, open-source relation…   29                   
bitnami/mysqld-exporter                                                          5                    
ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   51                   
cimg/mysql                                                                       0                    
rapidfort/mysql                 RapidFort optimized, hardened image for MySQL    23                   
rapidfort/mysql8-ib             RapidFort optimized, hardened image for MySQ…   9                    
google/mysql                    MySQL server for Google Compute Engine           23                   [OK]
hashicorp/mysql-portworx-demo                                                    0                    
rapidfort/mysql-official        RapidFort optimized, hardened image for MySQ…   7                    
newrelic/mysql-plugin           New Relic Plugin for monitoring MySQL databa…   1                    [OK]
databack/mysql-backup           Back up mysql databases to... anywhere!          86                   
bitnamicharts/mysql                                                              0                    
linuxserver/mysql               A Mysql container, brought to you by LinuxSe…   38                   
mirantis/mysql                                                                   0                    
docksal/mysql                   MySQL service images for Docksal - https://d…   0                    
linuxserver/mysql-workbench                                                      50                   
vitess/mysqlctld                vitess/mysqlctld                                 1                    [OK]
eclipse/mysql                   Mysql 5.7, curl, rsync                           0                    [OK]
drupalci/mysql-5.5              https://www.drupal.org/project/drupalci          3                    [OK]
drupalci/mysql-5.7              https://www.drupal.org/project/drupalci          0             
1.2.2 拉取镜像

【命令:拉取镜像】

docker pull 镜像名称
docker pull 镜像名称:版本号(注:指定版本的写法)

【命令:查询镜像检查是否已下载到本地】

docker image ls

【示例】

[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

[root@localhost ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        latest    3218b38490ce   18 months ago   516MB

【示意图】

1.3 mysql主从原理

【示意图:mysql主从原理】

1.4 mysql的主配置

1.4.1 linux创建配置文件、文件夹

在/usr/local/中先创建software文件夹,再在software下创建mysql文件夹conf和data

【示例】

[root@localhost ~]# cd /usr/local
[root@localhost local]# cd /usr/local/software
[root@localhost software]# ls
jdk
[root@localhost software]# mkdir -p mysql/3306
[root@localhost software]# ls
jdk  mysql
[root@localhost software]# cd mysql
[root@localhost mysql]# ls
3306
[root@localhost mysql]# cd 3306
[root@localhost 3306]# ls
[root@localhost 3306]# mkdir conf
[root@localhost 3306]# mkdir data
[root@localhost 3306]# ls
conf  data
[root@localhost 3306]# cd ..
[root@localhost mysql]# ls
3306

【示意图】

1.4.2 查看文件结构

【命令:查看文件结构】

tree

【示例】

[root@localhost mysql]# tree
.
└── 3306
    ├── conf
    └── data

3 directories, 0 files
[root@localhost mysql]# cd 3306
[root@localhost 3306]# tree
.
├── conf
└── data

2 directories, 1 file

【注意】如果没有tree命令, 需要先安装tree

【命令:安装tree】

yum -y install tree

【示例】

[root@localhost mysql]# tree
bash: tree: 未找到命令...

[root@localhost mysql]# yum -y install tree
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.163.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 tree.x86_64.0.1.6.0-10.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

===============================================================================================================================================================================================
 Package                                    架构                                         版本                                                 源                                          大小
===============================================================================================================================================================================================
正在安装:
 tree                                       x86_64                                       1.6.0-10.el7                                         base                                        46 k

事务概要
===============================================================================================================================================================================================
安装  1 软件包

总下载量:46 k
安装大小:87 k
Downloading packages:
tree-1.6.0-10.el7.x86_64.rpm                                                                                                                                            |  46 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : tree-1.6.0-10.el7.x86_64                                                                                                                                                   1/1 
  验证中      : tree-1.6.0-10.el7.x86_64                                                                                                                                                   1/1 

已安装:
  tree.x86_64 0:1.6.0-10.el7                                                                                                                                                                   

完毕!
1.4.3 拷贝my.cnf文件到conf文件夹下

在下方文件区域找到文件夹/usr/local/software/mysql/3306/conf,右上角按钮上传本地文件my.cnf

【示意图:拷贝my.cnf文件到conf文件夹下】

【示例:tree查看文件结构是否拷贝成功】

[root@localhost mysql]# cd 3306
[root@localhost 3306]# tree
.
├── conf
│   └── my.cnf
├── data
1.4.4 查看my.cnf文件(可省略)

【命令:查看my.cnf文件】

cat my.cnf

【示例】

[root@localhost mysql]# cd 3306
[root@localhost 3306]# cd conf
[root@localhost conf]# cat conf
cat: conf: 没有那个文件或目录
[root@localhost conf]# ls
my.cnf

[root@localhost conf]# cat my.cnf
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password

# Custom config should go here
!includedir /etc/mysql/conf.d/

server_id=200
1.4.5 进入my.cnf文件修改配置

【命令:进入my.cnf文件修改配置】

vim my.cnf

【修改内容】

server_id=200
log_bin=mysql-bin
binlog_format=row

【示例】

[root@localhost 3306]# cd conf
[root@localhost conf]# ls
my.cnf
[root@localhost conf]# vim my.cnf
[root@localhost conf]# cat my.cnf
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password

# Custom config should go here
!includedir /etc/mysql/conf.d/

server_id=200                 #服务器id
log_bin=mysql-bin             #binlog名称
binlog_format=row             #binlog的格式

[root@localhost conf]#
1.4.6 创建运行mysql主容器(master)
  • docker run 命令
    • -i:以交互模式运行容器
    • -t:为容器重新分配一个伪输入终端
    • --name :容器名称
    • --privileged: 设置容器公开权限(默认为true)
    • -p :映射端口 linux端口: 容器内置端口(mysql默认端口为3306)
    • -v : linux挂载文件夹/文件和容器内路径的映射
    • -e: 容器的环境变量(设置mysql默认用户名&密码)
    • -d: 后台运行容器,并返回容器ID

【命令:创建mysql的容器(docker)】

docker run -it \
--name mysql_3306 \
--privileged \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

【命令:查看docker服务器中容器状态及批量获取容器基本信息】(常用)

docker ps

【示例】

[root@localhost 3306]# docker run -it \
> --name mysql_3306 \
> --privileged \
> -p 3306:3306 \
> -v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
> -v /usr/local/software/mysql/3306/data:/var/lib/mysql \
> -v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
> -e MYSQL_ROOT_PASSWORD=123321 \
> -d mysql
05231a95b9685d23c0b9145ed986861f2d89f1c906b28c23544e19040b115bc5

[root@localhost 3306]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
05231a95b968   mysql     "docker-entrypoint.s…"   19 seconds ago   Up 18 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql_3306
1.4.7 进入容器
  • 进入容器实质上也是进入了一个linux环境。
  • docker exec
    • -it:以交互模式运行容器 ,为容器重新分配一个伪输入终端。
    • bash: bash(GNU Bourne-Again Shell)是最常用的一种shell(运行在终端的互动程序)。

【命令:进入主mysql_3306容器】

docker exec -it mysql_3306 bash

【示例】

[root@localhost 3306]# docker exec -it mysql_3306 bash
root@05231a95b968:/#

【注】

【注意细节】

1.4.8 在容器中运行mysql客户端

【命令1:运行mysql客户端】

mysql -u用户名 -p密码

【注】

【命令2:显示所有数据库】

show databases;

【命令3:退出mysql环境和容器】

exit

【注】下面quit那儿也可以用exit

【示例】

[root@localhost 3306]# docker exec -it mysql_3306 bash
root@05231a95b968:/# ls
bin  boot  dev  docker-entrypoint-initdb.d  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@05231a95b968:/# cd etc
root@05231a95b968:/etc# cd mysql

root@05231a95b968:/etc/mysql# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> quit
Bye
root@05231a95b968:/etc/mysql# exit
exit
[root@localhost 3306]#
1.4.9 开放指定端口和重新加载防火墙
  • 开放指定端口
    • firewall-cmd --zone=public --add-port=端口号/tcp --permanent
      • --zone: public 公开端口
      • --add-port: 端口号/协议名称
      • --permanent: 永久开放

【命令1:开放指定端口3306】

firewall-cmd --zone=public --add-port=3306/tcp --permanent

【命令2:重新加载防火墙】

firewall-cmd --reload

【命令3:查看开放的端口号】

firewall-cmd --zone=public --list-ports

【示例】

[root@localhost 3306]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@localhost 3306]# firewall-cmd --reload
success

[root@localhost conf]# firewall-cmd --zone=public --list-ports 
3306/tcp
1.4.10 navicat新建mysql连接并测试

【示意图】

【注意】主机和端口要根据想要连接的改,用户名和密码按个人设置的填

1.5 mysql的从配置

1.5.1 检查binlog是否开启
  • 进入mysql容器,输入命令: show variables LIKE ‘log_%’
  • ON: 表示已开启
  • 看log_bin状态是否为ON

【命令:检查binlog是否开启】

show variables LIKE ‘log_%’

【示例:看log_bin状态是否为ON】

[root@localhost 3306]# docker exec -it mysql_3306 bash
root@05231a95b968:/# cd etc/mysql
root@05231a95b968:/etc/mysql# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'log_%';
+----------------------------------------+----------------------------------------+
| Variable_name                          | Value                                  |
+----------------------------------------+----------------------------------------+
| log_bin                                | ON                                     |
| log_bin_basename                       | /var/lib/mysql/binlog                  |
| log_bin_index                          | /var/lib/mysql/binlog.index            |
| log_bin_trust_function_creators        | OFF                                    |
| log_bin_use_v1_row_events              | OFF                                    |
| log_error                              | stderr                                 |
| log_error_services                     | log_filter_internal; log_sink_internal |
| log_error_suppression_list             |                                        |
| log_error_verbosity                    | 2                                      |                                    |
| log_output                             | FILE                                   |
| log_queries_not_using_indexes          | OFF                                    |
| log_raw                                | OFF                                    |
| log_replica_updates                    | ON                                     |
| log_slave_updates                      | ON                                     |
| log_slow_admin_statements              | OFF                                    |
| log_slow_extra                         | OFF                                    |
| log_slow_replica_statements            | OFF                                    |
| log_slow_slave_statements              | OFF                                    |
| log_statements_unsafe_for_binlog       | ON                                     |
| log_throttle_queries_not_using_indexes | 0                                      |
| log_timestamps                         | UTC                                    |
+----------------------------------------+----------------------------------------+
21 rows in set (0.00 sec)

【或者:在navicat中新建查询,直接用mysql语句查询】

1.5.2 查看当前mysql容器中的binlog日志文件
  • 切换目录到 / var/lib/mysql,查看日志文件。或者,也可以查看binlog.index查看日志情况。
[root@localhost 3306]# docker exec -it mysql_3306 bash
root@05231a95b968:/# ls
bin  boot  dev  docker-entrypoint-initdb.d  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

root@05231a95b968:/# cd /var/lib/mysql
root@05231a95b968:/var/lib/mysql# ls
'#ib_16384_0.dblwr'   05231a95b968.err   binlog.000002   ca.pem            ib_buffer_pool   ibdata1   mysql.ibd            public_key.pem    sys
'#ib_16384_1.dblwr'   auto.cnf           binlog.index    client-cert.pem   ib_logfile0      ibtmp1    performance_schema   server-cert.pem   undo_001
'#innodb_temp'        binlog.000001      ca-key.pem      client-key.pem    ib_logfile1      mysql     private_key.pem      server-key.pem    undo_002

root@05231a95b968:/var/lib/mysql# cat binlog.index
./binlog.000001
./binlog.000002
1.5.3 查看当前mysql数据库binlog情况
  • 登录mysql客户端: mysql -uroot -p123
  • 使用命令: show master status;

【示例】

root@05231a95b968:/var/lib/mysql# mysql -uroot -p123321
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

【注】当前显示/var/lib/mysql/日志文件的最后一个文件,即本案例中的binlog.000002

1.5.4 创建与从(slave)服务通信的用户
  • 在2.4.10中建立的navicat连接mysql_3306,在之前建立的查询,输入mysql语句:
    • create user 'slave'@'%' identified by '123456';
    • GRANT REPLICATION SLAVE,REPLICATION CLIENT ON . TO 'slave'@'%';
    • ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    • flush privileges;

【示意图】

【注意】或者,在docker中的mysql中输入,也是一样的

【示例:在docker中的mysql中输入】

mysql> create user 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
1.5.6 查询master的状态

【命令:查询master的状态】

show master status;

【示例】

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 |      156 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> exit
Bye
root@05231a95b968:/var/lib/mysql# exit
exit

【注】

【注意】或者,也可以直接在navicat查询中直接输入show master status;查询

1.5.7 获取master容器ip地址
  • 退出容器,查询master容器内部地址

【示例】

[root@localhost conf]# docker inspect mysql_3306 |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",

【注】

1.5.8 新建配置文件夹

【示例】

[root@localhost ~]# cd /usr/local/software/mysql
[root@localhost mysql]# pwd
/usr/local/software/mysql
[root@localhost mysql]# mkdir -p 3310/conf 3310/data
[root@localhost mysql]# mkdir -p 3311/conf 3311/data
1.5.9 拷贝my.cnf文件到conf文件夹下

【示例】

[root@localhost conf]# cp my.cnf ../../3310/conf
[root@localhost conf]# cp my.cnf ../../3311/conf

【注】或者,参考1.4.3

1.5.10 进入my.cnf文件修改配置

【命令:进入my.cnf文件修改配置】

vim my.cnf

【修改内容:例如3310】

server_id=210
log_bin=mysql-slave01-bin
relay_log=wnhz-relay-bin
read_only=1

【示例:3310】

[root@localhost mysql]# cd 3310
[root@localhost 3310]# cd conf
[root@localhost conf]# ls
my.cnf
[root@localhost conf]# vim my.cnf
[root@localhost conf]# cat my.cnf
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password

# Custom config should go here
!includedir /etc/mysql/conf.d/

server_id=210
log_bin=mysql-slave01-bin
relay_log=wnhz-relay-bin
read_only=1

[root@localhost conf]#
1.5.11 创建运行mysql从容器(slave01)

【命令:创建mysql的容器(docker)】

docker run -it \
--name mysql_3310 \
--privileged \
-p 3310:3306 \
-v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3310/data:/var/lib/mysql \
-v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

【示例】

[root@localhost 3310]# docker run -it \
> --name mysql_3310 \
> --privileged \
> -p 3310:3306 \
> -v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
> -v /usr/local/software/mysql/3310/data:/var/lib/mysql \
> -v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
> -e MYSQL_ROOT_PASSWORD=123321 \
> -d mysql
72680c742611a2b5cf31bf77d9408111ffbc4a3f6dcfc4d141d43916c9ba1814
1.5.12 进入容器

【命令:进入从mysql_3310容器】

docker exec -it mysql_3310 bash

【示例】

[root@localhost 3310]# docker exec -it mysql_3310 bash
root@05231a95b968:/#
1.5.13 在容器中运行mysql客户端

【命令:运行mysql客户端】

mysql -u用户名 -p密码

【示例】

[root@localhost 3310]# docker exec -it mysql_3310 bash
root@72680c742611:/# mysql -uroot -p123321
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
1.5.14 修改从(slave)服务器与master关联

【命令:修改从(slave)服务器与master关联】

change master to
master_host='172.17.0.2',
master_user='slave',
master_password='123321',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=860;

【注】

【示例】

mysql> change master to
    -> master_host='172.17.0.2',
    -> master_user='slave',
    -> master_password='123321',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=860;
Query OK, 0 rows affected, 8 warnings (0.02 sec)
1.5.15 开启slave

【命令:开启slave】

start slave;

【示例】

mysql>  start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
1.5.16 查询slave状态

【命令:查询slave状态】

show slave status \G;

【示例】

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.17.0.2
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1071
               Relay_Log_File: wnhz-relay-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1071
              Relay_Log_Space: 743
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 200
                  Master_UUID: e408d3a4-1a1b-11ee-9318-0242ac110002
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.00 sec)

ERROR: 
No query specified

mysql> exit
Bye
root@72680c742611:/# exit
exit

【注】当出现两个yes时就是配置成功了

1.5.17 开放指定端口和重新加载防火墙

【命令1:开放指定端口3310】

firewall-cmd --zone=public --add-port=3310/tcp --permanent

【命令2:重新加载防火墙】

firewall-cmd --reload

【命令3:查看开放的端口号】

firewall-cmd --zone=public --list-ports

【示例】

mysql> exit
Bye
root@72680c742611:/# exit
exit
[root@localhost 3310]# firewall-cmd --zone=public --add-port=3310/tcp --permanent
success
[root@localhost 3310]# firewall-cmd --reload
success

[root@localhost conf]# firewall-cmd --zone=public --list-ports 
3310/tcp
1.5.18 navicat新建mysql连接并测试
  • 参考1.4.10

【注意】主机和端口要根据想要连接的改,用户名和密码按个人设置的填写

1.5.19 测试主从
  • 在master创建库book_db,查看从(slave)是否也相应创建成功。

【示意图】

Docker MySQL主从是一种数据库复制技术,通过在Docker容器中创建MySQL实例来实现主从同步。这种技术可以使数据在主数据库上的变化自动同步到从数据库上,确保数据的一致性和高可用性。 在创建Docker MySQL主从时,首先需要关闭防火墙并重启Docker以确保后续安装的MySQL可以正常启动。接下来,需要在Docker中创建并启动MySQL主服务器,通过端口映射将宿主机的端口与Docker容器内的MySQL服务器端口绑定。同时,还需要指定MySQL的配置文件和数据存储路径,并设置MySQL的root密码。 创建主服务器的命令示例为: 引用: ```bash docker run -d \ -p 3306:3306 \ -v /hitd/mysql/master/conf:/etc/mysql/conf.d \ -v /hitd/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ --name hitd-mysql-master \ mysql:8.0.29 ``` 引用: ```bash docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7 ``` 然后,需要创建MySQL主服务器的配置文件,并配置日志、数据和配置文件的路径。 最后,可以通过进入从数据库容器并使用MySQL客户端工具查看主从同步状态。 引用: ```bash docker exec -it mysql-slave /bin/bash mysql -uroot -proot ``` 通过以上步骤,你可以成功创建Docker MySQL主从环境。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker搭建MySQL主从同步(全网最全保姆教程)](https://blog.csdn.net/qq_49619863/article/details/128047193)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Docker 基础教程】Mysql主从环境搭建](https://blog.csdn.net/apple_51931783/article/details/126350430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值