CentOS使用docker部署mysql5.7、可使用navicat连接mysql服务,以及主从同步配置

查找待拉取的镜像

mysql镜像地址:https://hub.docker.com/_/mysql?tab=tags
我使用的是5.3.37的版本:docker pull mysql:5.7.37
docker images 查看拉取得镜像
在这里插入图片描述

指定容器服务器挂载路径启动mysql(自命名名称,服务器路径会自动创建)

注意:同一镜像重复使用,需修改指定不同的默认端口

在这里插入图片描述

docker run -it \
--restart=always \
--name mysql_5.7 \
-v /usr/local/docker/mysql/cnf:/etc/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-v /usr/local/docker/mysql/log:/var/log \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-p 13307:3307 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.37

若要自定义配置文件启动mysql,则先停止并删除上述命令启动的容器docker stop 容器id/容器名docker rm -f 容器id/容器名,然后再在/usr/local/docker/mysql/cnf下创建my.cnf文件,根据需要配置,然后再使用上述命令启动

[client]
port=3307
default-character-set=utf8mb4
[mysqld]
port=3307
#数据库字符
character-set-server=utf8mb4
#排序规则
collation-server=utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
#最大连接数
max_connections=150
#最大错误连接数
max_connect_errors=200
#MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中
back_log=80
#是否启用慢查询日志,1为启用,0为禁用  
slow_query_log=1
#慢查询执行的秒数,必须达到此值可被记录
long_query_time=3
#慢查询日志
slow_query_log_file = /var/log/mysql-slow.log
#该参数代表binlog的过期时间,单位是天
expire_logs_days=15

查看mysql的启动情况

docker ps -a

若没有启动成功,使用命令查看启动日志并根据错误提示并解决

docker logs -f 容器id/容器名

启动成功则使用如下命令,进入容器终端

docker exec -it 容器id/容器名 bash

在这里插入图片描述

连接mysql

默认密码可查看日志获得,可能为空

mysql -uroot -proot

在这里插入图片描述
然后使用mysql数据库

use mysql;

修改root用户的密码(password自己修改)

ALTER USER 'root'@'%'  IDENTIFIED WITH mysql_native_password BY  'password';

刷新权限

flush privileges;

双重退出到服务器终端;

quit;
exit;

navicat连接mysql

使用端口13307
在这里插入图片描述

连接出错:

1、防火墙打开情况下,查看端口是否开放或查看防火墙对容器是否拦截。
2、ECS控制台,网络与安全——》安全组配置规则——》入方向,开放端口。

MySQL主从同步设置

1、停止并删除启好的mysql容器
2、以不同端口启动两容器

docker run -it \
--restart=always \
--name mysql_master_3306 \
-v /usr/local/docker/mysql_master_3306/cnf:/etc/mysql \
-v /usr/local/docker/mysql_master_3306/data:/var/lib/mysql \
-v /usr/local/docker/mysql_master_3306/log:/var/log \
-v /usr/local/docker/mysql_master_3306/mysql-files:/var/lib/mysql-files \
-p 13306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.37
docker run -it \
--restart=always \
--name mysql_slave_3307 \
-v /usr/local/docker/mysql_slave_3307/cnf:/etc/mysql \
-v /usr/local/docker/mysql_slave_3307/data:/var/lib/mysql \
-v /usr/local/docker/mysql_slave_3307/log:/var/log \
-v /usr/local/docker/mysql_slave_3307/mysql-files:/var/lib/mysql-files \
-p 13307:3307 \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.37

3、修改master配置文件

[client]
port=3306
default-character-set=utf8mb4
[mysqld]
port=3306
#数据库字符
character-set-server=utf8mb4
#排序规则
collation-server=utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
#最大连接数
max_connections=150
#最大错误连接数
max_connect_errors=200
#MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中
back_log=80
#是否启用慢查询日志,1为启用,0为禁用
slow_query_log=1
#慢查询执行的秒数,必须达到此值可被记录
long_query_time=3
#慢查询日志
slow_query_log_file = /var/log/mysql-slow.log
#设置server_id , 同一局域网中需要唯一
server_id=101
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能
log-bin=mall-mysql-bin
#设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
#设置使用二进制日志格式(mixed,statement,row)
binlog_format=mixed
#而简直日志过期清理时间,默认值为0,表示不自动清理
expire_logs_days=7
#跳过主从复制中遇到的所有错我或指定类型的错误,避免slave端复制中断
#如:1062错误指一些主键重复,1032错误是因为主从数据库数据不一致,设置多个以英文逗号分隔
slave_skip_errors=1062
1007: 数据库已存在,创建数据库失败
1008: 数据库不存在,删除数据库失败
1050: 数据表已存在,创建数据表失败
1051: 数据表不存在,删除数据表失败
1054: 字段不存在,或程序文件跟数据库有冲突
1060: 字段重复,导致无法插入
1061: 重复键名
1068: 定义了多个主键
1094: 位置线程ID
1146: 数据表缺失,请恢复数据库
1053: 复制过程中主服务器宕机
1062: 主键冲突 Duplicate entry '%s' for key %d修改slave配置文件
[client]
port=3307
default-character-set=utf8mb4
[mysqld]
port=3307
#数据库字符
character-set-server=utf8mb4
#排序规则
collation-server=utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
#最大连接数
max_connections=150
#最大错误连接数
max_connect_errors=200
#MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中
back_log=80
#是否启用慢查询日志,1为启用,0为禁用
slow_query_log=1
#慢查询执行的秒数,必须达到此值可被记录
long_query_time=3
#慢查询日志
slow_query_log_file = /var/log/mysql-slow.log
#设置server_id , 同一局域网中需要唯一
server_id=102
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能,以备slave作为其他数据库实例的master时使用
log-bin=mall-mysql-slave1-bin
#设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
#设置使用二进制日志格式(mixed,statement,row)
binlog_format=mixed
#而简直日志过期清理时间,默认值为0,表示不自动清理
expire_logs_days=7
#跳过主从复制中遇到的所有错我或指定类型的错误,避免slave端复制中断
#如:1062错误指一些主键重复,1032错误是因为主从数据库数据不一致,设置多个以英文逗号分隔
slave_skip_errors=1062
# relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
# log_slave_updates 表示 slave 将复制时间写进自己的二进制日志
log_slave_updates=1
# slave设置为只读 (具有super权限的用户除外)
read_only=1

5、重启两容器
在这里插入图片描述
6、进入master容器并配置

docker exec -it mysql_master_3306 bash
mysql -uroot -p

输入密码:root
切换数据库,挨着输入并执行:

use mysql;
create user 'slave'@'%' identified by '123456';
grant replication slave on *.* to 'slave'@'%';
flush privileges;

查看master数据库状态,并记录file与position值:

show master status;

在这里插入图片描述
7、查看master数据库对应的容器ip地址:

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id

或者进入master容器使用cat /etc/hosts查看
在这里插入图片描述

8、进入slave容器并配置

docker exec -it mysql_slave_3307 bash
mysql -uroot -p

输入密码:root

change master to master_host='172.17.0.3',master_user='slave',master_password='123456',master_port=3306,master_log_file='mall-mysql-bin.000001',master_log_pos=154;

启动并查看状态,Slave_IO_Running以及Slave_SQL_Running都为Yes标识启动成功

start slave;
show slave status\G;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值