docker搭建Mariadb双主配置

1、软件要求

CentOS 版本 CentOS 7
docker 版本 docker-ce 19.03.5
mariadb 版本 mariadb 10.3.13

2、docker-ce安装

先确认当前操作系统网络服务已经开启并且能够正常连接到外网,并以 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

3、 docker -> mariadb 安装

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

4、启动mysql服务

(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

5、设置主机和从机交互

第一台主机
进入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时表示配置成功

在其中一台服务器创建数据库和数据表进行测试

问题:出现 Slave_SQL_Running = NO

执行show slave status;
查看Last_Errno,可以看到错误提示码为1146,在slave的my.cnf的[mysqld]段添加slave_skip_errors=1146,然后重启slave数据库,主从关系即可恢复正常。

你可能感兴趣的:(MYSQL,docker,mariadb,数据库)