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中读取