Loading

Docker 构建 Mysql

mysql单机

拉取镜像

Docker Hub找到你想要下载的版本,例如我要下载mysql8最新版

docker pull mysql:8

创建配置文件

  1. 创建配置文件夹
mkdir -p /usr/local/mysql/conf
  1. 编辑
vi /usr/local/mysql/conf/default.cnf
  1. 填入下列内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysqld]
# 设置mysql服务端默认字符集
character-set-server=utf8mb4
# 数据库字符集排序规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 开启通用查询日志
general_log=ON
# 通用查询日志存储位置
general_log_file=/var/log/mysql/general.log
# 开启慢查询日志
slow_query_log=ON
# 慢查询日志的阈值(单位是秒),超出此设定值的 SQL 都会被记录
long_query_time=10
# 慢查询日志存储位置
slow_query_log_file=/var/log/mysql/slow_query.log

创建容器

docker run \
  -p 3306:3306 \
  --restart=always \
  --name=mysql \
  -v /usr/local/mysql/logs:/var/log/mysql \
  -v /usr/local/mysql/data:/var/lib/mysql \
  -v /usr/local/mysql/conf:/etc/mysql/conf.d \
  --network=my-network \
  --network-alias=mysql-alias \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
  • name:创建后的容器名称
  • MYSQL_ROOT_PASSWORD:root用户密码
  • logs:挂载日志路径
  • conf:挂载配置路径
  • data:挂载数据路径,如果容器删掉,还能再次挂载数据
  • network:非必须,要加入的网络
  • network-alias:被必须,在网络中的别名
  • TZ:时区

测试连接

image

mysql集群(一主一从)

创建主节点

拉取镜像

docker pull mysql:8

创建配置文件

  1. 创建配置文件目录
mkdir -p /usr/local/mysql-master/conf
  1. 编辑
vi /usr/local/mysql-master/conf/master.cnf
  1. 填入下列内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysqld]
# 设置mysql服务端默认字符集
character-set-server=utf8mb4
# 数据库字符集排序规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 开启通用查询日志
general_log=ON
# 通用查询日志存储位置
general_log_file=/var/log/mysql/general.log
# 开启慢查询日志
slow_query_log=ON
# 慢查询日志的阈值(单位是秒),超出此设定值的 SQL 都会被记录
long_query_time=10
# 慢查询日志存储位置
slow_query_log_file=/var/log/mysql/slow_query.log
# 同一局域网内的server-id必须具有唯一性
server-id=101
# 指定同步哪些数据库
binlog-do-db=venus
# 禁止同步哪些数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 开启二进制日志功能,并设置日志文件名,文件名可以随便取名(关键)
log-bin=mysql-bin
# 设置binlog日志格式,有row(默认)、statement、mixed
binlog_format=statement
# 设置每隔多少次事务提交操作才会将这些操作写入二进制日志文件
sync_binlog=1
# 默认使用'mysql_native_password'插件认证
default_authentication_plugin=mysql_native_password

创建容器

docker run \
  -p 3301:3306 \
  --restart=always \
  --name=mysql-master \
  -v /usr/local/mysql-master/data:/var/lib/mysql \
  -v /usr/local/mysql-master/logs:/var/log/mysql \
  -v /usr/local/mysql-master/conf:/etc/mysql/conf.d \
  --network=my-network \
  --network-alias=mysql-master-alias \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
  • name:创建后的容器名称
  • MYSQL_ROOT_PASSWORD:root用户密码
  • logs:挂载日志路径
  • conf:挂载配置路径
  • data:挂载数据路径,如果容器删掉,还能再次挂载数据
  • network:非必须,要加入的网络
  • network-alias:被必须,在网络中的别名
  • TZ:时区

准备账号

在主节点上创建用来同步数据的账号,需要授予replication slave和replication client权限

create user 'master'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'master'@'%';

查看主节点状态

记住此处的 File 和 Position ,待会要用

show master status;

image

创建从节点

创建配置文件

  1. 创建配置文件目录
mkdir -p /usr/local/mysql-slave/conf
  1. 编辑
vi /usr/local/mysql-slave/conf/slave.cnf
  1. 填入下列内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysqld]
# 设置mysql服务端默认字符集
character-set-server=utf8mb4
# 数据库字符集排序规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
# 开启通用查询日志
general_log=ON
# 通用查询日志存储位置
general_log_file=/var/log/mysql/general.log
# 开启慢查询日志
slow_query_log=ON
# 慢查询日志的阈值(单位是秒),超出此设定值的 SQL 都会被记录
long_query_time=10
# 慢查询日志存储位置
slow_query_log_file=/var/log/mysql/slow_query.log
# 同一局域网内的server-id必须具有唯一性
server-id=102
# 开启二进制日志功能,以备slave作为其它slave的master时使用
#log-bin=mysql-slave-bin
# 指定中继日志
relay-log=slave1-relay-bin
# 默认使用'mysql_native_password'插件认证
default_authentication_plugin=mysql_native_password

创建容器

docker run \
  -p 3302:3306 \
  --restart=always \
  --name=mysql-slave \
  -v /usr/local/mysql-slave/data:/var/lib/mysql \
  -v /usr/local/mysql-slave/logs:/var/log/mysql \
  -v /usr/local/mysql-slave/conf:/etc/mysql/conf.d \
  --network=my-network \
  --network-alias=mysql-slave-alias \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8

设置同步信息

  1. 关闭同步
stop slave;
  1. 设置同步信息
change master to master_host='172.24.102.95', master_port=3301, master_user='master', master_password='123456', master_log_file='mysql-bin.000006', master_log_pos=2758, master_connect_retry=30;
  • master_host: 主库地址
  • master_port: 主库端口
  • master_user: 用来同步数据的账号,前面已经创建好了
  • master_password: 同步数据账号的密码
  • master_log_file: 指定slave从哪个日志文件开始同步数据,即上文提到的 File 值
  • master_log_pos: 指定从日志文件的哪个位置开始同步数据,即上文提到的 Position 值
  • master_connect_retry: 如果连接失败,重试的时间间隔(单位:秒),默认是60秒
  1. 开启同步
start slave;

查看从节点状态

当Slave_IO_Running和Slave_SQL_Running都是Yes时,主从搭建成功了

show slave status;

image

posted @ 2022-02-14 13:10  多久会在  阅读(50)  评论(0)    收藏  举报