docker建多个mysql_在Linux下使用Docker-compose建立多个数据库
1.在一个文件夹下建立docker-compose.yml文件
vim docker-compose
2.编写docker-compose文件内容
#版本号
version: "3"
services:
#主数据库
mysql-master:
#镜像
image: mysql:5.7.22
restart: always
#名称(可以为空)
hostname: mysql-master
#容器名称
container_name: mysql_master
#端口号
ports:
- 3316:3306
#环境变量
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
#挂载文件
volumes:
- ./master/mysql/data:/var/lib/mysql
- ./master/mysql/log:/var/log/mysql
command:
#id唯一
--server_id=100
--log-bin=mysql-master-bin
--sync_binlog=1
--binlog-ignore-db=mysql
--binlog_format=mixed
--expire_logs_days=7
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
links:
- mysql-slave-read
mysql-slave-read:
image: mysql:5.7.22
restart: always
hostname: mysql-slave-read
container_name: mysql-slave-read
ports:
- 3317:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- ./slave/mysql/data:/var/lib/mysql
- ./slave/mysql/log:/var/log/mysql
command:
--server_id=200
--read_only=1
--binlog-ignore-db=mysql
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
mysql-slave-back:
image: mysql:5.7.22
restart: always
hostname: mysql-slave-back
container_name: mysql-slave-back
ports:
- 3318:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- ./slave-back/mysql/data:/var/lib/mysql
- ./slave-back/mysql/log:/var/log/mysql
command:
--server_id=300
--log-bin=slave-back-bin
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
3.使用docker ps 指令查看容器是否运行
docker ps
如果配置文件没有改动的话使用docker ps指令会看到如下图所示:
4.使用数据库软件连接容器指定的端口 (注意主从端口)
连接三个数据库,如失败,请查看云服务器端口是否开启,本地失败,请重新操作
5.连接数据库间的主从关系
主表
#在数据库软件中进行指令操作
#提供访问的账号与密码
grant replication slave on *.* to 'root'@'%' identified by 'root';
#执行操作锁指令
flush tables with read lock
#展示主库的状态(请记下File与Position的值)
show master status;
#解锁
UNLOCK TABLE
从表
#建立主从关系
change master to master_host=#'IP地址',
master_user='slave',
master_password=#'访问密码',
master_port=#'主库端口',
master_log_file=#'File的值',
master_log_pos=#'Position的值'
#开启复制
start slave
#停止复制
stop slave
#展示连接状态
show slave status
在展示连接时看到下图就说明连接成功了
tip:
执行锁操作后是无法进行更新的指令,所以记得解锁