Docker安装mysql8并配置主从复制

1. 安装mysql8

1.1 新增挂载文件
shell 复制代码
# 新增mysql挂载文件夹
mkdir -p /root/docker/mysql/m01/log
mkdir -p /root/docker/mysql/m01/data
mkdir -p /root/docker/mysql/m01/conf

1.2 新增mysql配置文件

shell 复制代码
# 新增mysql配置文件
cd /root/docker/mysql/m01/conf
vim my.cnf
# 下面是my.cnf内容
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8
1.3 运行mysql
shell 复制代码
# 查看mysql镜像 TAG:8.0
docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        8.0       3218b38490ce   2 years ago   516MB

# 运行mysql
docker run \
--restart=always \
--privileged=true \
-p 3306:3306 --name bsmysql01 \
-v /root/docker/mysql/m01/log:/var/log/mysql \
-v /root/docker/mysql/m01/data:/var/lib/mysql \
-v /root/docker/mysql/m01/conf/my.cnf:/etc/mysql/my.cnf \
-v /root/docker/mysql/m01/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0

# 进入容器
docker exec -it bsmysql01 /bin/bash
# 连接mysql
mysql -u root -p
Enter password: 123456
mysql> exit
1.4 可能遇到的问题

请配置服务器安全组规则。

1.4.2 如果权限问题, null, message from server: "Host '192.68.128.66' is not allowed to connect to this MySQL server"

这个错误信息表明 MySQL 服务器拒绝了来自 IP 地址 192.68.128.66 的连接请求。MySQL 默认只允许本地主机(即 localhost 或 127.0.0.1)的连接。若要允许其他远程主机连接,你需要在 MySQL 的 mysql.user 表中为相应的用户添加远程主机的权限。

shell 复制代码
# 更新用户权限
mysql> UPDATE mysql.user SET Host = '%' WHERE User = 'root';
Query OK, 1 row affected (0.00 sec)

# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
1.5 如果还想再启动一个mysql服务

我们可以再启动一个bsmysql02,基本操作与上面一致, 注意端口映射3307:3306

shell 复制代码
docker run \
--restart=always \
--privileged=true \
-p 3307:3306 --name bsmysql02 \
-v /root/docker/mysql/m02/log:/var/log/mysql \
-v /root/docker/mysql/m02/data:/var/lib/mysql \
-v /root/docker/mysql/m02/conf/my.cnf:/etc/mysql/my.cnf \
-v /root/docker/mysql/m02/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0

那么, 普通的mysql服务创建结束。

2. 主从复制

2.1 修改my.cnf配置

修改主库my.cnf

shell 复制代码
# 设置服务器唯一标识,主服务器设置为100
server-id=100
# 开启二进制日志,文件名为mysql-bin,这是主从复制的关键
log-bin=mysql-bin

修改从库my.cnf

shell 复制代码
# 设置服务器唯一标识,从服务器设置为101,确保每台服务器的server-id都是唯一的
server-id=101
# 开启二进制日志,文件名为mysql-slave-bin,建议开启以便进行链式复制或故障排查
log-bin=mysql-slave-bin
# 设置中继日志的名称,这是从服务器用于存储从主服务器接收到的二进制日志信息的日志
relay_log=edu-mysql-relay-bin
relay_log_recovery=1
2.2 重启容器(我这容器正在运行,如果没有需run启动新容器指令如上文)
shell 复制代码
docker restart 主容器ID;
docker restart 从容器ID;
2.3 连接到mysql进行配置

配置主库

shell 复制代码
# 建立账户并授权
# 在主库创建一个用户供从库使用
mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 查询Master的状态, File、Position字段配置从库有用。
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      818 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

配置从库

shell 复制代码
# 配置需要复制的主机
mysql> CHANGE MASTER TO MASTER_HOST='192.168.92.156',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=818;
Query OK, 0 rows affected, 8 warnings (0.02 sec)

mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.01 sec)

# 查询Slave的状态
mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 14.103.92.156
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 818
               Relay_Log_File: edu-mysql-relay-bin.000002
                Relay_Log_Pos: 324
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
2.4 验证

在主服务器上新建表并插入数据,检查从服务器是否成功同步新增。

至此主从复制配置完成。

相关推荐
一叶飘零_sweeeet1 分钟前
PostgreSQL vs MySQL:Java 选型指南与实战避坑
mysql·postgresql·数据库选型
HalvmånEver2 分钟前
MySQL表的约束(二)
java·数据库·mysql
梁萌2 分钟前
MySQL 中 utf8mb4_bin 与 utf8mb4_general_ci 区别
数据库·mysql
dualven_in_csdn2 分钟前
【docker】docker下如何使用宿主主机的GPU
运维·docker·容器
zdzx auvu10 分钟前
MySQL 函数
数据库·mysql
趙卋傑15 分钟前
如何安装多个版本的MySQL
数据库·mysql
HalvmånEver15 分钟前
MySQL表的约束(一)
数据库·mysql
jeCA EURG22 分钟前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
拄杖忙学轻声码30 分钟前
Linux平台 CentOS、Ubuntu、Debian 系统安装 docker compose
ubuntu·docker·centos
牛奶咖啡1332 分钟前
Docker容器实践——使用Dockerfile构建定制LNMP架构镜像并部署Wordpress应用
docker·dockerfile构建镜像·构建自己的linux系统镜像·使用源码构建nginx镜像·构建自己的mysql镜像·使用源码构建php镜像·用镜像部署wordpress