docker安装mysql主从服务器

mysql 主从服务

1.前期准备

  1. 准备两台实体服务器(10.12.110.97,10.12.110.98)
  2. 根据docker安装文档,安装好docker环境
  3. 修改docker启动参数,可参考如下参数

提示,首次上线可按照该流程进行安装,如果数据库升级安装则该流程不能完全匹配,需要数据库暂停服务,进行手动同步后再进行主从设置。

2.部署安装步骤

2.1 镜像安装

下载docker镜像,如果可以连接互联网从互联网下载,如果没有,导入mysql.tar文件,具体文件位置:ftp://10.12.110.100/image/mysql.tar 用户名:test 密码:test,需要在两台主备服务器上都安装mysql镜像

  • 在线
docker pull mysql:5.7
  • 离线
docker load mysql.tar

2.2 创建mysql相关文件夹及其配置文件

#配置文件目录
mkidr -p /data/mysql/config
#数据文件目录
mkdir -p /data/mysql/data

  1. 创建mysql配置文件
  • master
    创建配置文件 下载地址ftp://10.12.110.100/config/mysql/master.conf
touch /data/mysql/config/master.cnf
vi /data/mysql/config/master.cnf
#########master.cnf############
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address   = 0.0.0.0
port=3307
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

## 设置server_id,一般设置为IP,注意要唯一
server_id=100
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
# 如果备份多个数据库,重复设置这个选项即可
binlog-do-db=my_db
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
  • slave
    创建配置文件 下载地址ftp://10.12.110.100/config/mysql/slave.conf
touch /data/mysql/config/slave.cnf
vi /data/mysql/config/slave.cnf
#########slave.cnf############
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address   = 0.0.0.0
port=3307
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


## 设置server_id,一般设置为IP,注意要唯一
server_id=101
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
# 如果备份多个数据库,重复设置这个选项即可
binlog-do-db=my_db
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1

2.3 创建mysql相关文件夹及其配置文件

  • 启动mysql master容器服务

# -p 3306:3306 端口映射  对外的端口映射
# -v /data/mysql/data:/var/lib/mysql  设置mysql主数据目录放置在宿主机上的位置
# -v /data/mysql/config/:/etc/mysql/mysql.conf.d/  配置文件文件夹的映射,可以将所有自定义的配置文件放置在这个文件夹中,默认mysql可以自动记载配置文件
# -e MYSQL_ROOT_PASSWORD=Rzx@1218  设置mysql的root初始化密码
# --restart always 每次docker启动的时候自动自动docker容器
sudo docker run -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/config/:/etc/mysql/mysql.conf.d/ -e MYSQL_ROOT_PASSWORD=Rzx@1218   --restart always -d mysql:5.7

# 连接mysql,进入客户端
docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3306 -uroot -pRzx@1218
# 执行下列sql
#创建slave同步账号,并进行授权
CREATE USER 'slave'@'%' IDENTIFIED BY 'Rzx@1218';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 
show master status; 
#关键记录下master_log_file,master_log_pos两个关键数据
  • 启动mysql slave容器服务

# -p 3306:3306 端口映射  对外的端口映射
# -v /data/mysql/data:/var/lib/mysql  设置mysql主数据目录放置在宿主机上的位置
# -v /data/mysql/config/:/etc/mysql/mysql.conf.d/  配置文件文件夹的映射,可以将所有自定义的配置文件放置在这个文件夹中,默认mysql可以自动记载配置文件
# -e MYSQL_ROOT_PASSWORD=Rzx@1218  设置mysql的root初始化密码
# --restart always 每次docker启动的时候自动自动docker容器
sudo docker run -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/config/:/etc/mysql/mysql.conf.d/ -e MYSQL_ROOT_PASSWORD=Rzx@1218   --restart always -d mysql:5.7

# 连接mysql,进入客户端
docker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3306 -uroot -pRzx@1218
# master_log_file 对应 File,具体请在主机上执行show master status; 获取
# master_log_pos 对应 Position,具体请在主机上执行show master status; 获取
change master to master_host='主机服务地址', master_user='slave', master_password='Rzx@1218', master_port=3306, master_log_file='edu-mysql-bin.000004', master_log_pos=2611, master_connect_retry=10;  
show slave status;
start slave;
show slave status;

3.测试

  • master执行

# 在主mysql创建表并插入数据
create database my_db;
use my_db;
create table hi_tb(id int(3),name char(10));
insert into hi_tb values(001,'bobu');
  • slave执行

# 在从数据库检查可以看到已经有对应的数据
use my_db;
show tables;
select * from hi_tb;

如果主服务器建库,建表,进行数据处理,在从服务器中都可以反映出变化结果,则主从同步配置完成

4.附录

你可能感兴趣的:(docker安装mysql主从服务器)