docker中mysql一主两从
·
一。 下载mysql5.7镜像
docker pull mysql:5.7
二。配置安装master
1.创建部署配置文件夹
mkdir -p /data/mysql-master/{data,logs,conf}
mkdir -p /data/mysql-slave1/{data,logs,conf}
mkdir -p /data/mysql-slave2/{data,logs,conf}
2.进入conf文件,然后新建一个文件,名字叫my.cnf,将以下信息复制到文件里:
[mysql]
#mysql以socket方式运行时的sock文件路径
socket=/var/lib/mysql/mysqld.sock
[mysqld]
#lower_case_table_names=0,表示区分大小写,创建的库表会原样大小写保存在磁盘上
#lower_case_table_names=1,表示不区分大小写,创建库表时MySQL会将所有的库表名转换成小写字母保存在磁盘上
#,且SQL语句中涉及到库表无论写成大写或者小写,都会被转化成小写进行查询和写入
lower_case_table_names=1
#mysql运行的端口
port=3306
#mysql5.7以后的不兼容问题处理
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#打开log-bin日志
log-bin=mysql-bin
#存放数据的路径
datadir=/var/lib/mysql
#mysql以socket方式运行时的sock文件路径
socket=/var/lib/mysql/mysqld.sock
#是否支持符号连接,即数据库或表能够存储在my.cnf
#中指定datadir以外的分区或目录,为0不开启
symbolic-links=0
#mysql服务器分配的ID,在启用主从和集群的时候必须指定,并且不能重复
server-id = 1
#要给从机同步的库
#binlog-do-db=hl
#不给从机同步的库(这里不同步mysql、information_schema、performance_schema、sys库)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#binlog-ignore-db=performance_schema
#binlog-ignore-db=sys
#mysql允许最大连接数
max_connections=2000
#默认字符集
character-set-server=utf8
#默认存储引擎
default-storage-engine=INNODB
#mysql最大接受的数据包大小
max_allowed_packet=16M
#日志自动过时清理天数
expire_logs_days = 90
# 事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒
innodb_lock_wait_timeout=120
#设置时区
default-time_zone='+8:00'
[mysqld_safe]
#进程ID文件
pid-file=/data/var/mysql/mysqld.pid
#错误日志纪录位置
log-error=/var/log/mysqld.log
3.此时Master所需的挂载和配置就已经完成,只需要使用命令启动容器即可:
docker run --name=mysql-master -p 3306:3306 --privileged=true -v /etc/localtime:/etc/localtime \
-v /data/mysql-master/logs:/logs \
-v /data/mysql-master/data:/var/lib/mysql \
-v /data/mysql-master/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
4.进入mysql容器中
docker exec -it containerId bash
5.登录mysql
mysql -uroot -proot
6.创建从用户并赋予权限
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
7.查看master状态
SHOW MASTER STATUS;
三。安装slave1
1.进入conf文件夹,建立一个叫my.cnf的文件,将一下内容复制到文件中并保存:
[mysql]
#mysql以socket方式运行时的sock文件路径
socket=/var/lib/mysql/mysqld.sock
[mysqld]
#lower_case_table_names=0,表示区分大小写,创建的库表会原样大小写保存在磁盘上
#lower_case_table_names=1,表示不区分大小写,创建库表时MySQL会将所有的库表名转换成小写字母保存在磁盘上
#,且SQL语句中涉及到库表无论写成大写或者小写,都会被转化成小写进行查询和写入
lower_case_table_names=1
#mysql运行的端口
port=3306
#mysql5.7以后的不兼容问题处理
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#打开log-bin日志
#log-bin=mysql-bin
#存放数据的路径
datadir=/var/lib/mysql
#mysql以socket方式运行时的sock文件路径
socket=/var/lib/mysql/mysqld.sock
#是否支持符号连接,即数据库或表能够存储在my.cnf
#中指定datadir以外的分区或目录,为0不开启
symbolic-links=0
#mysql服务器分配的ID,在启用主从和集群的时候必须指定,并且不能重复
server-id = 2
#要给从机同步的库
#binlog-do-db=hl
#不给从机同步的库(这里不同步mysql、information_schema、performance_schema、sys库)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#binlog-ignore-db=performance_schema
#binlog-ignore-db=sys
#mysql允许最大连接数
max_connections=2000
#默认字符集
character-set-server=utf8
#默认存储引擎
default-storage-engine=INNODB
#mysql最大接受的数据包大小
max_allowed_packet=16M
#日志自动过时清理天数
expire_logs_days = 90
# 事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒
innodb_lock_wait_timeout=120
#设置时区
default-time_zone='+8:00'
[mysqld_safe]
#进程ID文件
pid-file=/data/var/mysql/mysqld.pid
#错误日志纪录位置
log-error=/var/log/mysqld.log
2.启动slave数据库
docker run --name=mysql-slave1 -p 3307:3306 --privileged=true \
-v /etc/localtime:/etc/localtime \
-v /data/mysql-slave1/logs:/logs \
-v /data/mysql-slave1/data:/var/lib/mysql \
-v /data/mysql-slave1/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
3.安装完成后,进入slave数据库,建立主从关系:
CHANGE MASTER TO master_host = '192.168.8.5',\
master_user = 'slave',\
master_password = 'root',\
master_port = 3306,\
master_log_file = 'mysql-bin.000003',\
master_log_pos = 769,\
master_connect_retry = 30;
4.使用 START SLAVE启动slave功能:
START SLAVE;
5.查看slave状态,SHOW SLAVE STATUS;
SHOW SLAVE STATUS;
四。安装slave2
1.进入conf文件夹,建立一个叫my.cnf的文件,将一下内容复制到文件中并保存:
[mysql]
#mysql以socket方式运行时的sock文件路径
socket=/var/lib/mysql/mysqld.sock
[mysqld]
#lower_case_table_names=0,表示区分大小写,创建的库表会原样大小写保存在磁盘上
#lower_case_table_names=1,表示不区分大小写,创建库表时MySQL会将所有的库表名转换成小写字母保存在磁盘上
#,且SQL语句中涉及到库表无论写成大写或者小写,都会被转化成小写进行查询和写入
lower_case_table_names=1
#mysql运行的端口
port=3306
#mysql5.7以后的不兼容问题处理
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#打开log-bin日志
#log-bin=mysql-bin
#存放数据的路径
datadir=/var/lib/mysql
#mysql以socket方式运行时的sock文件路径
socket=/var/lib/mysql/mysqld.sock
#是否支持符号连接,即数据库或表能够存储在my.cnf
#中指定datadir以外的分区或目录,为0不开启
symbolic-links=0
#mysql服务器分配的ID,在启用主从和集群的时候必须指定,并且不能重复
server-id = 3
#要给从机同步的库
#binlog-do-db=hl
#不给从机同步的库(这里不同步mysql、information_schema、performance_schema、sys库)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#binlog-ignore-db=performance_schema
#binlog-ignore-db=sys
#mysql允许最大连接数
max_connections=2000
#默认字符集
character-set-server=utf8
#默认存储引擎
default-storage-engine=INNODB
#mysql最大接受的数据包大小
max_allowed_packet=16M
#日志自动过时清理天数
expire_logs_days = 90
# 事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒
innodb_lock_wait_timeout=120
#设置时区
default-time_zone='+8:00'
[mysqld_safe]
#进程ID文件
pid-file=/data/var/mysql/mysqld.pid
#错误日志纪录位置
log-error=/var/log/mysqld.log
2.启动slave数据库
docker run --name=mysql-slave2 -p 3308:3306 --privileged=true \
-v /etc/localtime:/etc/localtime \
-v /data/mysql-slave2/logs:/logs \
-v /data/mysql-slave2/data:/var/lib/mysql \
-v /data/mysql-slave2/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
3.安装完成后,进入slave数据库,建立主从关系:
CHANGE MASTER TO master_host = '192.168.8.5',\
master_user = 'slave',\
master_password = 'root',\
master_port = 3306,\
master_log_file = 'mysql-bin.000003',\
master_log_pos = 769,\
master_connect_retry = 30;
4.使用 START SLAVE启动slave功能:
START SLAVE;
5.查看slave状态,SHOW SLAVE STATUS;
SHOW SLAVE STATUS;
更多推荐
所有评论(0)