CentOS 版本 CentOS 7
docker 版本 docker-ce 19.03.5
mariadb 版本 mariadb 10.3.13
先确认当前操作系统网络服务已经开启并且能够正常连接到外网,并以 root 身份进行安装调试。
校准当前服务器时间
yum install -y ntpdate
ntpdate pool.ntp.org
1.1 初始化文件夹
以 root 的身份登录服务器并在服务器上创建 /home/bigdt目录
mkdir -p /home/bigdt
1.2 下载安装包
进入 /home/bigdt 目录并下载docker安装包:
cd /home/bigdt
yum install -y wget
wget http://60.191.37.212:8101/static/docker-install.tar.gz
1.3 安装docker
进入 /home/bigdt 目录,解压安装包,执行安装脚本
cd /home/bigdt
tar -xvf docker-install.tar.gz
cd docker-install
./setup-docker.sh
如果出现以下输出,表示Docker安装成功
Docker version 18.03.1-ce, build 9ee9f40
setup docker success ==========================>
安装完成将显示docker的版本号
docker -v
mariadb用于数据汇聚本身数据存储,使用最新版本即可(版本号需要大于等于10.3.13)
拉取镜像
docker pull mariadb:10.3.13
删除如果之前有同名的容器
docker stop mariadb-dw
docker rm mariadb-dw
运行容器
docker run -td --name mariadb-dw --privileged=true --network host -e TZ=Asia/Shanghai --restart always -v /data/mysql/conf/my.cnf:/etc/my.cnf:ro -v /data/mysql/data:/var/lib/mysql:rw -v /data/mysql/log:/var/log/mysql:rw -e MYSQL_ROOT_PASSWORD=hz310012 mariadb:10.3.13 --default-authentication-plugin=mysql_native_password
服务运行完成后需要开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
安装完成后使用第三方数据库管理工具测试连接是否通过,连接属性如下
host: 服务器ip
port: 3306
username: root
password: hz310012
(1) 分别在两台服务器上启动通过容器启动mysql,同一台主机端口要处理一下
docker run -td --name mysql1 --privileged=true --network host -e TZ=Asia/Shanghai --restart always -v /home/mysqlha/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hz310012 mariadb:10.3.13
docker run -td --name mysql2 --privileged=true --network host -e TZ=Asia/Shanghai --restart always -v /home/mysqlha/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hz310012 mariadb:10.3.13
(2) 进入docker容器,进入mysql
docker exec -it ae0a bash
mysql -u root -p
(3) 授权从机访问
因为互为主从,两台mysql都需要授权
grant replication slave on *.* to root@'%' identified by 'hz310012';
flush privileges;
(4)修改配置文件
分别进入两个容器内部,修改配置文件(如果没有vi,复制到容器外部编辑好再覆盖进去)
第一台主机
docker cp mysql1:/etc/mysql/my.cnf ./
vim my.cnf,在 mysqld下增加
server-id=601
log_bin=mysql1-bin
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=test
innodb_flush_log_at_trx_commit=1
binlog_format=mixed
复制配置文件回去,重启服务
docker cp my.cnf mysql1:/etc/mysql/my.cnf
docker restart mysql1
第二台主机
docker cp mysql2:/etc/mysql/my.cnf ./
vim my.cnf,在 mysqld下增加
server-id=801
log_bin=mysql2-bin
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=test
innodb_flush_log_at_trx_commit=1
binlog_format=mixed
复制配置文件回去,重启服务
docker cp my.cnf mysql2:/etc/mysql/my.cnf
docker restart mysql2
第一台主机
进入sql命令行,其中连接信息是第二台主机的信息
change master to
MASTER_HOST='172.16.1.236',
master_user='root',
master_password='hz310012',
MASTER_PORT=3306,
master_log_file='mysql2-bin.000001',
MASTER_LOG_POS=1;
查看更改状态
start SLAVE;
show slave status;
第二台主机
进入sql命令行,其中连接信息是第一台主机的信息
change master to
MASTER_HOST='172.16.1.235',
master_user='root',
master_password='hz310012',
MASTER_PORT=3306,
master_log_file='mysql1-bin.000001',
MASTER_LOG_POS=1;
查看更改状态
start SLAVE;
show slave status;
如果两台服务器的Slave_IO_Running与Slave_SQL_Running都为Yes时表示配置成功
在其中一台服务器创建数据库和数据表进行测试
执行show slave status;
查看Last_Errno,可以看到错误提示码为1146,在slave的my.cnf的[mysqld]段添加slave_skip_errors=1146,然后重启slave数据库,主从关系即可恢复正常。