mariadb/mysql建立主从

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: mariadb/mysql建立主从

前提


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


  • 保证时间同步
  • 保证都安装了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


此时节点应该自动停止了,检查是否没有 mariadbmysql 进程,如果有按需求判断是否停掉(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

参考添加成功的图片

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS8yMDIwLzA2LzEwL2hLQUR4ZTE2MzAucG5n.png


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


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

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;


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

aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS8yMDIwLzA2LzA0L3lpbFNseDE3MTgucG5n.png

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

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


aHR0cHM6Ly9jb2RpbmczbWluLm9zcy1hY2NlbGVyYXRlLmFsaXl1bmNzLmNvbS8yMDIwLzA2LzA0L0sxMm1zVzE3MzYucG5n.png


the end


可能遇到的坑


请根据你的业务写入速度和同步速度,设置好主节点的binlog大小和过期时间,具体设置方法请参考本小册


mysql 正确清理 binlog 日志的两种方法中的方法二、通过设置 binlog 过期的时间,使系统自动删除 binlog 文件


如果你想建立互为主从


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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
613 0
|
3月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
213 8
|
4月前
|
缓存 关系型数据库 MySQL
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
243 19
|
3月前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
523 0
|
3月前
|
SQL Ubuntu 关系型数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
46 0
|
4月前
|
存储 关系型数据库 MySQL
利用 MySQL 克隆插件搭建主从
MySQL 的 Clone 插件是一个强大的功能,首次引入于 MySQL 8.0.17 版本。简单来说,Clone Plugin 是一款物理克隆数据工具,它能够帮助我们快速、高效地克隆或复制数据库,极大地简化了数据库迁移、备份和恢复的过程,让我们在处理大量数据时更加得心应手。本篇文章我们一起来学习下如何使用克隆插件。
82 2
|
4月前
|
运维 关系型数据库 MySQL
【实操记录】MySQL主从配置
本文使用MySQL原生支持的主从同步机制,详细记录了配置步骤及运维操作方法,可供大家直接参考、使用。 本文假设已经部署了两台主机的MySQL软件,且数据库服务正常,详细部署步骤可本站搜索:"mysql二进制安装包部署"
140 0
|
3月前
|
关系型数据库 MySQL 数据库连接
FreeSWITCH通过mod_mariadb原生连接MySQL
FreeSWITCH通过mod_mariadb原生连接MySQL
310 0
|
4月前
|
SQL 关系型数据库 MySQL
【MySQL】主从异步复制配置
【MySQL】主从异步复制配置
92 1
|
6月前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
200 3

推荐镜像

更多