docker部署mysql一主多从–主备复制模式
根据实际安装的目录配置全局环境变量(root 用户执行)
如果已存在全局环境变量则无需配置
export LOCAL_IP=$(echo $(ip a | grep $(route -n | grep ^0.0.0.0 | awk '{print $8}') | grep "inet " | awk '{print $2}') | sed 's+/.*++')
sudo tee -a /etc/profile << EOF
export DEPLOY_HOME=/app
export LOCAL_IP=${LOCAL_IP}
EOF
安装 MySQL 服务器
-
服务器:10.11.33.211,10.11.33.212,10.11.33.213
-
部署账号:mysql
-
创建数据目录
#配置文件目录
mkdir -p ${DEPLOY_HOME}/mysql/conf#日志文件目录 mkdir -p ${DEPLOY_HOME}/mysql/logs #数据文件目录 mkdir -p ${DEPLOY_HOME}/mysql/data #用于存放 sql 脚本 mkdir -p ${DEPLOY_HOME}/mysql/script
-
docker 中使用的 mysql 配置
cat > ${DEPLOY_HOME}/mysql/conf/my.cnf <<EOF
[mysqld]
# 该字段控制时间字段使用 CURRENT_TIMESTAMP 是否可以工作
explicit_defaults_for_timestamp=0
# 最大连接数
max_connections = 4001
# 表名存储为给定的大小和比较:
# 0-表名存储为给定的大小和比较是区分大小写的
# 1-在磁盘是小写的,但是比较的时候是不区分大小写
# 2-表名存储为给定的大小写但是比较的时候是小写的
lower_case_table_names=1
# 修改时区
default-time-zone = ‘+08:00’#慢日志时间设置/ 秒级 long_query_time=0.2 #开通慢sql slow_query_log=1 #慢sql日志文件 slow_query_log_file=/var/lib/mysql/mysql-slow.log #mysql的同步的数据中是包含server-id的, #用于标识该语句最初是从哪个server写入的 server-id=1 log-bin=/var/lib/mysql/mysql-bin binlog_format=ROW innodb_large_prefix=on innodb_file_format=BARRACUDA innodb_buffer_pool_size=12288M innodb_buffer_pool_instances=8 innodb_write_io_threads=4 innodb_read_io_threads=4 EOF
-
分别在三台机器上,启动 一主两从 mysql 并设置mysql挂载目录到容器
sudo docker run -p 3306:3306 --name mysql
–restart always
-v ${DEPLOY_HOME}/mysql/conf:/etc/mysql
-v ${DEPLOY_HOME}/mysql/logs:/var/log/mysql
-v ${DEPLOY_HOME}/mysql/data:/var/lib/mysql
-v ${DEPLOY_HOME}/mysql/script:/var/lib/mysql-files
-e MYSQL_ROOT_PASSWORD=1017~Fulin
-d local.docker-repo.com:5000/mysql:5.7# 在10.11.33.211上执行 sudo docker run -p 3306:3306 --name mysql \ --restart always \ -v ${DEPLOY_HOME}/mysql/conf:/etc/mysql \ -v ${DEPLOY_HOME}/mysql/logs:/var/log/mysql \ -v ${DEPLOY_HOME}/mysql/data:/var/lib/mysql