docker安装MySQL集群(一主一从)

docker安装MySQL集群(一主一从)

前菜测试

1、拉取mysql5.7的镜像到本地

[root@aliyun ~]# docker pull mysql:5.7

2、启动mysql容器,指定密码为123456

[root@aliyun ~]# docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

3、进入mysql容器

[root@aliyun ~]# docker exec -it mysql /bin/bash
root@d9b75dcb7dae:/# 

4、输入密码访问

root@d9b75dcb7dae:/# mysql -u root -p

MySQL 集群安装

使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群

master容器

1、启动master容器,使用卷挂载,防止数据丢失

[root@aliyun ~]# docker run --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 
-v /root/mysql_master/data:/var/lib/mysql 
-v /root/mysql_master/log:/var/log/mysql 
-v /root/mysql_master/conf:/etc/mysql/conf.d 
-d -p 3316:3306 mysql:5.7

2、在宿主机的/root/mysql_master/conf 目录中新建 my.cnf 文件,并在其中键入如下内容

# 设置字符集编码
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
server_id=01 # 指定mysql唯一标识
binlog-ignore-db=mysql # 在二进制日志中忽略名为 "mysql" 的数据库的操作记录
log-bin=master-log-bin # 启用二进制日志,并指定二进制日志文件的名称为 "master-log-bin"
binlog_cache_size=1M # 二进制日志缓存的大小为 1MB
binlog_format=mixed # 设置二进制日志的格式为 "mixed"
expire_logs_days=7 # 设置二进制日志文件过期的天数为 7
slave_skip_errors=1062 # 设置当从服务器执行复制时遇到错误码为 1062 的错误时,跳过该错误并继续复制

3、重启master容器

[root@aliyun conf]# docker restart mysql_master

4、进入容器连接mysql,查看其字符编码

[root@aliyun conf]# docker exec -it mysql_master /bin/bash
root@d61cb0fa6c50:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.7.36-log 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 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

5、为当前mysql创建一个用户,允许从任何主机(‘%’)连接到 mysql 服务器,并指定密码

mysql> create user 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

6、授权,为用户 ‘slave’ 授予复制相关权限。

mysql> grant replication slave,replication client on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)

replication slave 权限允许用户作为一个从服务器连接到主服务器,并执行复制操作。

replication client 权限允许用户查看复制相关的信息。

*.* 表示所有库和表

slave容器

master容器

1、启动master容器,使用卷挂载,防止数据丢失

[root@aliyun ~]# docker run --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 
-v /root/mysql_slave/data:/var/lib/mysql 
-v /root/mysql_slave/log:/var/log/mysql 
-v /root/mysql_slave/conf:/etc/mysql/conf.d 
-d -p 3326:3306 mysql:5.7

2、在宿主机的/root/mysql_master/conf 目录中新建 my.cnf 文件,并在其中键入如下内容

[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

server_id=02 # 指定mysql唯一标识
binlog-ignore-db=mysql
log-bin=slave-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=relay-log-bin # 指定中继日志文件的名称前缀。中继日志文件用于记录从服务器上执行的复制操作,以便其他从服务器可以通过读取中继日志进行级联复制。
log_slave_updates=1 # 启用从服务器记录复制操作到自己的二进制日志的功能
read_only=1 # 将服务器设置为只读模式

3、重启slave容器

[root@aliyun conf]# docker restart mysql_slave

4、进入容器连接mysql,查看其字符编码

[root@aliyun conf]# docker exec -it mysql_slave /bin/bash
root@72c2eed0b7ca:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.7.36-log 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 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

配置主从赋值

1、查看master状态

在 master 中运行 show master status 命令,查看二进制日志文件名及要开始的位置。

在这里插入图片描述

2、在 slave 中通过运行 change master to 命令来指定其要连接的 master 相关信息。

mysql> change master to master_host='172.29.121.66', #主服务器的主机名或IP地址
master_user='slave', # 主服务器指定的复制用户
master_password='123456', # 主服务器的复制用户密码
master_port=3316, # 主服务器的端口
master_log_file='master-log-bin.000001', # 主服务器的二进制日志文件名
master_log_pos=617; # 主服务器的二进制日志位置

3、slave开启同步

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

查看slave的状态,同步已经开始

在这里插入图片描述

测试

1、在master中写入

在这里插入图片描述

2、在slave中读取

在这里插入图片描述