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)是否也相应创建成功。

【示意图】

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1. 准备工作 - 安装Docker - 新建两个目录:`master`和`slave`,用于存放主从数据库的数据 2. 创建MySQL容器 - 创建主库容器 ``` docker run --name mysql-master -v /path/to/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 ``` - 创建从库容器 ``` docker run --name mysql-slave -v /path/to/slave:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 ``` 注意:`/path/to/master`和`/path/to/slave`是本地文件系统中的目录,用于存放主从数据库的数据。`123456`是MySQL的root密码,可以根据需要修改。 3. 配置主库 - 进入主库容器 ``` docker exec -it mysql-master /bin/bash ``` - 登录MySQL ``` mysql -uroot -p123456 ``` - 创建用于复制的用户 ``` CREATE USER 'replication'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; FLUSH PRIVILEGES; ``` - 查看主库状态 ``` SHOW MASTER STATUS; ``` 记录下File和Position的值,后面配置从库时需要用到。 4. 配置从库 - 进入从库容器 ``` docker exec -it mysql-slave /bin/bash ``` - 登录MySQL ``` mysql -uroot -p123456 ``` - 配置从库复制 ``` CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='replication', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; START SLAVE; ``` 注意:`mysql-master`是主库的容器名称,`replication`是上一步中创建的用于复制的用户,`mysql-bin.000001`和`154`分别是主库状态中的File和Position的值。 - 查看从库状态 ``` SHOW SLAVE STATUS\G ``` 如果Slave_IO_Running和Slave_SQL_Running都是`Yes`,则说明配置成功。 5. 测试主从同步 在主库中创建一个测试数据库和表,并插入一条数据: ``` CREATE DATABASE test; USE test; CREATE TABLE t (id INT, name VARCHAR(20)); INSERT INTO t VALUES (1, 'test'); ``` 在从库中查询该表: ``` USE test; SELECT * FROM t; ``` 可以看到从库中也有刚刚插入的数据,说明主从同步成功。 6. 总结 以上就是使用Docker搭建MySQL主从的步骤,需要注意的是,如果主库或从库的容器重启或者删除后再次创建,需要重新配置从库复制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值