首页 > 数据库 >mariadb/mysql建立主从

mariadb/mysql建立主从

时间:2023-01-03 16:05:30浏览次数:58  
标签:同步 log 主从 mysql mariadb 节点


前提

本方案是两节点主从方案,只要建立好主从,及时数据库挂掉又拉起主从模式不会失效。

  • 保证时间同步
  • 保证都安装了​​mysql/mariadb​

建立主从的过程

这里介绍的是两节点主从,如果是集群模式,至少需要三个节点,因为偶数个节点是导致脑裂高发的原因(无法确定该同步谁的)。

  1. 主从服务器节点设置不同的​​server-id​
  2. 启用二进制日志和​​relaylog​
  3. 主节点创建一个拥有复制权限的用户账号
  4. 查询主节点​​binlog​​信息
  5. 设置从节点同步主节点

停止所有写入

在所有服务器上执行此步

在所有服务器上执行此步

在所有服务器上执行此步

停止所有写入是为了防止数据设置同步的过程中数据不一致。

如果 ​​mariadb​​​ 是通过 ​​hosts​​​ 文件中的域名进行访问的,那么只需要编辑 ​​/etc/hosts​​​ , 把​​mysql​​的域名解析删掉就可以停止所有读写,执行以下命令。

关掉所有读写​​mysql​​​的服务,你也可以直接用​​iptables​​来禁用端口通信(如果应用有自动重连机制的话,否则只能重启应用了)

等待 1 分钟,依次进入集群中所有的 ​​mariadb​​​ ,查看进程状态,确保没有额外的读写操作( ​​command​​​ 列除了 ​​show processlist​​​ 外没有多余的 ​​sleep​​​ 和 ​​query​​ )。

MariaDB [(none)]> show processlist;

备份与导入

首先,你需要保证所有的节点数据一致,在升级过程中万一升级失败能及时的恢复数据。

请参考本小册​​备份数据库​

添加一个专门用来同步的用户

在从节点中的 ​​mariadb​​ 执行以下命令,如果全部输出 ok,则继续。

/usr/local/mariadb/bin/mysql -A -e "GRANT replication slave ON *.* TO 'rep'@'%' IDENTIFIED BY '123456'; flush privileges;"
mysql -A -urep -p123456 -e "select 'ok';"

停止所有节点

执行以下命令停止

/usr/local/mariadb/bin/mysqladmin  shutdown

此时节点应该自动停止了,检查是否没有 ​​mariadb​​​ 和 ​​mysql​​​ 进程,如果有按需求判断是否停掉(​​kill​​)。

ps -ef | grep -E "mariadb|mysql"

更新 mysql 配置(从节点)

先创建​​relaylog​​日志存储的目录,用来防止同步波动缓存同步信息。(注意,请设置成你自己的数据目录)

mkdir /data/mariadb/relaylog
chown -R mysql.mysql /data/mariadb/relaylog/

添加配置到 ​​[mysqld]​​ 配置节中(注意现在不启动),该配置表示我们只同步 ​​cloud​​ 库和其下的表,如果要同步更多的库和表可以用逗号分隔,追加。

如果想了解各个参数是什么含义可以到本小册​​relaylog​​里看

vim /etc/my.cnf.d/server.cnf
# 添加内容如下
replicate-do-db=cloud #cloud是你想同步的库名,如果有多个请用逗号隔开
log-slave-updates
replicate-wild-do-table=cloud.% #cloud是你想同步的库名,cloud.% 代表这个库下面的所有表,如果有多个请用逗号隔开
binlog-ignore-db=mysql # 忽略mysql库
slave-skip-errors=1032,1062,1053,1146,2003
max_relay_log_size = 0
relay_log=/data/mariadb/relaylog/relay-bin #请设置成正确的目录,上面刚刚创建的那个,最后的relay-bin是文件前缀
relay_log_purge = 1
relay_log_recovery = 1
sync_relay_log =0
sync_relay_log_info = 0
slave-skip-errors=1032,1062,1053,1146,2003

参考添加成功的图片

mariadb/mysql建立主从_服务器

启动主节点并获取主节点信息

如果你的目录不同请自行修改

mkdir -p /var/run/mariadb; chown -R mysql:mysql /var/run/mariadb; /usr/local/mariadb/bin/mysqld_safe --datadir=/data/mariadb/data --pid-file=/var/run/mariadb/mariadb.pid  > /dev/null 2>&1  &

获取同步主节点的关键信息

进入主节点数据库中,执行命令

unlock tables;
show master status;

得到同步主节点的关键信息

mariadb/mysql建立主从_服务器_02

启动从节点并设置同步信息

mkdir -p /var/run/mariadb; chown -R mysql:mysql /var/run/mariadb; /usr/local/mariadb/bin/mysqld_safe --datadir=/data/mariadb/data --pid-file=/var/run/mariadb/mariadb.pid  > /dev/null 2>&1  &

建立主从结构

进入从节点的数据库,指定主库信息,完成主从关系建立(注意:下面命令中的【主节点 ip 地址】别忘记替换,使用 ​​eth0​​​ 本地网卡的 ​​ip​​​ ,不要使用浮动 ​​ip​​​ ,也不要使用 ​​vip​​ )

账号和密码就是我们刚刚设置的,

unlock tables;
CHANGE MASTER TO
MASTER_HOST='主节点的ip地址',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000171',
MASTER_LOG_POS=33105258;
start slave; #开始同步

查看 slave 的状态,注意查看 slave 的进程状态,下面红色方框中圈起来的是两个 ​​Yes​​​ 就表示状态正常了,注意等待主库复制的延迟秒数变为 0 ​​Seconds_Behind_Master: 0​

show slave status \G

mariadb/mysql建立主从_数据库_03

the end

可能遇到的坑

请根据你的业务写入速度和同步速度,设置好主节点的​​binlog​​​大小和过期时间,具体设置方法请参考本小册
​​​mysql 正确清理 binlog 日志的两种方法​​中的方法二、通过设置 binlog 过期的时间,使系统自动删除 binlog 文件

如果你想建立互为主从

如果你想建立互为主从,那么你可以把主节点当作从节点,把从节点当作主节点,从本文的

​​添加一个专门用来同步的用户​​开始重新执行,直到最后一步。


标签:同步,log,主从,mysql,mariadb,节点
From: https://blog.51cto.com/u_12392289/5986062

相关文章