背景
由于之前测试环境部署的mariadb是单机的,公司其他项目的服务器中毒了,导致有一个项目的数据丢失了,加上项目组的确有需要,所以就还是要搭建主从这个方式。
环境信息
服务器:192.168.1.101 (主库),192.168.1.102 (从库)
数据库版本:10.11.2
服务器系统:CentOS Linux release 7.7
本文是在服务器已经安装好了数据库的前提下进行的
一、虚拟机方式
主库配置
1,设置主库数据库配置,修改/etc/my.cnf文件
log_bin = mysql-bin #记录操作日志
binlog_ignore_db=mysql #不同步MySQL系统数据库
server_id=101 #数据库集群中的每个节点id都要不同
2,登录主库数据库,创建账号并赋予replication的权限
grant replication slave on *.* to 'user'@'172.16.60.133' identified by '123456';
3,
查询当前主库log文件及当前位置(主)
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql-bin.000002 | 5327893| | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
#记住file和position的部分,从服务器会用到
从库配置
1,修改从库数据库置,同样修改/etc/my.cnf
server-id=102
log-bin=mysql-bin
2,登录从库数据库,设置主从复制
change master to master_host='192.168.1.101',master_user='root',master_password=123456,master_log_file=mysql-bin.000002',master_log_pos=5327893;
数据迁移
先将主库的数据备份和导入到从库,再开始同步
1,在主节点服务器上操作,备份主库的数据库,导出所有数据库的
mysqldump -uroot -p’123456’ --all-databases > db.sql
2,在从节点服务器操作,导入到从库
mysql -uroot -p’123456’ < db.sql
开启主从复制
登录从节点数据库,执行开始主从复制命令
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
并查看从节点状态
MariaDB [(none)]> show slave status\G-*
测试一下表的增删改查,此时就可以看到同步成功
问题汇总
问题1,修改表字段后,没有更新到,一些表字段和存储过程报错
排查后,发现是设置主从复制时没有加上master_log_pos,后面加上了就可以了
Docker 方式部署主从
1,首先,在宿主机上创建用于存储配置文件和数据的文件夹。例如,我们可以创建/home/mariad/data 文件夹。
2,创建my.cnf文件,并将其保存在/home/mariad/config文件夹中。以下是示例文件内容:
[mysqld]
log-bin=mysql-bin
server-id=1
部署主节点
docker run -d --name master \
-e MYSQL_ROOT_PASSWORD=<your_password> \
-v //home/mariad/config:/etc/mysql/conf.d \
-v /home/mariad/data:/var/lib/mysql \
Mariadb
部署从节点
docker run -d --name slave \
-e MYSQL_ROOT_PASSWORD=<your_password> \
-v /home/mariad/config:/etc/mysql/conf.d \
-v /home/mariad/data:/var/lib/mysql \
Mariadb
在主节点创建一个用于复制的用户
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
在从节点上,设置从节点连接到主节点的信息。在Mariadb shell中执行以下命令
CHANGE MASTER TO MASTER_HOST='<master_ip>',
MASTER_USER='replication_user',
MASTER_PASSWORD='<password>',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
在从节点启动
START SLAVE;