【linux下mysql主从复制操作流程】

linux下mysql主从复制操作流程

在Linux下实现MySQL主从复制(Master-Slave Replication)是一个常见的需求,用于读写分离、数据备份等场景。以下是一个详细的操作流程,包括每个步骤、注意事项以及总结。

一、准备环境

  1. 安装MySQL

    • 确保主服务器(Master)和从服务器(Slave)都已经安装了MySQL。
    • 可以通过包管理工具安装,例如:sudo apt-get install mysql-server(Debian/Ubuntu)或sudo yum install mysql-server(CentOS/RHEL)。
  2. 配置网络连通性

    • 确保主服务器和从服务器之间可以通过网络相互通信。

二、配置主服务器(Master)

  1. 编辑MySQL配置文件

    • 打开MySQL配置文件(通常是/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf)。

    • 添加或修改以下内容:

      ini 复制代码
      [mysqld]
      server-id = 1
      log-bin = mysql-bin
      binlog-do-db = your_database  # 仅复制特定的数据库,可选
    • server-id:每个服务器的唯一标识符,主服务器和从服务器不能相同。

    • log-bin:启用二进制日志。

    • binlog-do-db:仅复制特定的数据库,如果希望复制所有数据库,可以省略此行。

  2. 重启MySQL服务

    • 重启MySQL服务以使配置生效:

      sh 复制代码
      sudo systemctl restart mysql
  3. 创建复制用户

    • 登录到MySQL:

      sh 复制代码
      mysql -u root -p
    • 创建一个用于复制的用户,并授予必要的权限:

      sql 复制代码
      CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
      FLUSH PRIVILEGES;
  4. 锁定表并获取二进制日志位置

    • 为了确保数据一致性,锁定表并获取当前二进制日志文件名和位置:

      sql 复制代码
      FLUSH TABLES WITH READ LOCK;
      SHOW MASTER STATUS;
    • 记录下FilePosition的值,稍后从服务器上会用到。

  5. 备份数据库

    • 使用mysqldump备份数据库,并传输到从服务器:

      sh 复制代码
      mysqldump -u root -p --all-databases --master-data=2 > all_databases.sql
    • 将生成的all_databases.sql文件复制到从服务器。

  6. 解锁表

    • 在主服务器上解锁表:

      sql 复制代码
      UNLOCK TABLES;

三、配置从服务器(Slave)

  1. 编辑MySQL配置文件

    • 打开MySQL配置文件(路径同上)。

    • 添加或修改以下内容:

      ini 复制代码
      [mysqld]
      server-id = 2
      relay-log = mysql-relay-bin
    • server-id:确保与主服务器不同。

    • relay-log:定义中继日志文件名。

  2. 重启MySQL服务

    • 重启MySQL服务以使配置生效:

      sh 复制代码
      sudo systemctl restart mysql
  3. 导入主服务器的备份

    • 将之前在主服务器上生成的all_databases.sql文件导入到从服务器:

      sh 复制代码
      mysql -u root -p < all_databases.sql
  4. 配置从服务器以连接到主服务器

    • 登录到从服务器的MySQL:

      sh 复制代码
      mysql -u root -p
    • 配置从服务器:

      sql 复制代码
      CHANGE MASTER TO
        MASTER_HOST='master_server_ip',
        MASTER_USER='replica_user',
        MASTER_PASSWORD='replica_password',
        MASTER_LOG_FILE='mysql-bin.000001',  # 使用SHOW MASTER STATUS得到的File值
        MASTER_LOG_POS= 12345;  # 使用SHOW MASTER STATUS得到的Position值
  5. 启动复制

    • 在从服务器上启动复制进程:

      sql 复制代码
      START SLAVE;
  6. 检查复制状态

    • 检查从服务器状态:

      sql 复制代码
      SHOW SLAVE STATUS \G;
    • 确保Slave_IO_RunningSlave_SQL_Running都为Yes,并且没有错误。

四、注意事项

  1. 防火墙和网络

    • 确保MySQL端口(默认3306)在主服务器和从服务器之间开放。
  2. 数据一致性

    • 在主服务器上进行备份和获取二进制日志位置时,确保没有写入操作,或者选择适当的备份策略(如使用Percona XtraBackup等工具)。
  3. 权限和安全性

    • 复制用户应仅授予必要的权限,并且密码应足够复杂。
    • 使用SSL加密复制连接以增加安全性。
  4. 监控和故障排查

    • 定期监控复制状态,及时发现并解决问题。
    • 使用工具如pt-table-checksumpt-table-sync来检查和修复数据不一致。

五、总结

MySQL主从复制是一个强大且灵活的功能,可以显著提高数据库的可用性和可扩展性。通过遵循上述步骤,您可以轻松地在Linux下实现MySQL的主从复制。重要的是,要仔细规划配置,确保网络连通性和安全性,以及定期监控复制状态以维护数据一致性。

相关推荐
legend_jz1 小时前
Socket编程UDP
linux
湫ccc1 小时前
Python连接MySQL数据库教程
开发语言·python·mysql
dengjiayue2 小时前
MySQL 事务
数据库·mysql
YRr YRr2 小时前
深入解析Ubuntu 20.04中ROS的catkin_make工具
linux·运维·ubuntu
王佑辉2 小时前
【mysql】tinyint、int、bigint的区别
mysql
wellnw2 小时前
【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案
linux·运维·ubuntu
Yake19653 小时前
正则表达式中^的用法
数据库·mysql·正则表达式
轨迹H3 小时前
一文学会“瑞士军刀“-netcat命令使用
linux·网络安全·渗透测试·nc
棉晗榜3 小时前
.net core在linux导出excel,System.Drawing.Common is not supported on this platform
linux·excel·asp.net core·miniexcel