mysql主从复制(超简单)

本文详细介绍了MySQL数据库主从复制的配置步骤,包括修改配置文件、授权从服务器账户、启动复制功能等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下:

1、主从服务器分别作以下操作
  1.1、版本一致
  1.2、初始化表,并在后台启动mysql
  1.3、修改root的密码

2、修改主服务器master:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=222       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

3、修改从服务器slave:
   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=226       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

4、重启两台服务器的mysql
   /etc/init.d/mysql restart

5、在主服务器上建立帐户并授权slave:
   #/usr/local/mysql/bin/mysql -uroot -pmttang   
   mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

6、登录主服务器的mysql,查询master的状态
   mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000004 |      308 |              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)
   注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave:
   mysql>change master to aster_host='192.168.145.222',master_user='tb',master_password='q123456',
         master_log_file='mysql-bin.,000004',master_log_pos=308;   //注意不要断开,“308”无单引号。

   Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

   mysql> show slave status\G

   *************************** 1. row ***************************

                Slave_IO_State: Waiting for master to send event

                   Master_Host: 192.168.2.222  //主服务器地址

                   Master_User: myrync         //授权帐户名,尽量避免使用root

                   Master_Port: 3306           //数据库端口,部分版本没有此行

                 Connect_Retry: 60

               Master_Log_File: mysql-bin.000004

           Read_Master_Log_Pos: 600        //#同步读取二进制日志的位置,大于等于>=Exec_Master_Log_Pos

                Relay_Log_File: ddte-relay-bin.000003

                 Relay_Log_Pos: 251

         Relay_Master_Log_File: mysql-bin.000004

              Slave_IO_Running: Yes       //此状态必须YES

             Slave_SQL_Running: Yes       //此状态必须YES
                    ......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,主从服务器配置完成。
  
9、主从服务器测试:

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

  mysql> create database hi_db;
  Query OK, 1 row affected (0.00 sec)

  mysql> use hi_db;
  Database changed

  mysql>  create table hi_tb(id int(3),name char(10));
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> insert into hi_tb values(001,'bobu');
  Query OK, 1 row affected (0.00 sec)

  mysql> show databases;
   +--------------------+
   | Database           |
   +--------------------+
   | information_schema |
   | hi_db              |
   | mysql              |
   | test               |
   +--------------------+
   4 rows in set (0.00 sec)

从服务器Mysql查询:

   mysql> show databases;

   +--------------------+
   | Database           |
   +--------------------+
   | information_schema |
   | hi_db              |          //I'M here,大家看到了吧
   | mysql              |
   | test               |
   +--------------------+
   4 rows in set (0.00 sec)

   mysql> use hi_db
   Database changed
   mysql> select * from hi_tb;    //可以看到在主服务器上新增的具体数据
   +------+------+
   | id   | name |
   +------+------+
   |    1 | bobu |
   +------+------+
   1 row in set (0.00 sec)
 

10、完成:
    编写一shell脚本,用nagios监控slave的两个“yes”,如发现只有一个或零个“yes”,就表明主从有问题了,发短信警报吧。

本文出自 “系统网络运维” 博客,请务必保留此出处http://369369.blog.51cto.com/319630/790921

<think>我们正在讨论MySQL主从复制初始化时是否必须使用mysqldump导出导入数据的问题。根据引用[1]和引用[2]的内容,我们可以总结如下: 引用[1]指出:在进行主从同步之前,要确保从库上已经存在需要备份的数据库和表。主从复制本身不会创建库和表,如果不存在,则会出现同步错误。因此,需要先通过mysqldump导出数据,然后用source命令导入到从库中。 引用[2]给出了一个具体的操作示例:使用mysqldump命令导出主库的数据(包括所有数据库,使用--master-data选项),然后将导出的sql文件传输到从库服务器,并在从库上导入。 然而,问题在于:是否必须使用mysqldump?有没有其他方法? 答案是:不一定非要用mysqldump,但必须保证主从初始数据一致。mysqldump是常用的方法之一,但也可以使用其他方法,例如: 1. **物理备份**:比如使用Percona XtraBackup工具进行物理备份,然后在从库上恢复。这种方法对于大数据量来说效率更高。 2. **文件系统快照**:如果数据库存储在支持快照的文件系统(如LVM)上,可以通过快照来获取一致性的数据备份,然后复制到从库。 但是,无论使用哪种方法,都需要注意以下几点: - 在获取主库一致性备份时,必须记录备份时对应的二进制日志位置(binlog file和position),以便在从库上配置复制起点。 - 从库恢复后,需要配置主库信息(CHANGE MASTER TO)并指定正确的日志位置。 引用[2]中的mysqldump命令使用了`--master-data=2`选项,该选项会在导出的SQL文件中自动添加`CHANGE MASTER TO`语句(以注释形式存在),其中记录了备份时主库的binlog位置。这样在从库导入后,可以直接启动复制,无需手动查找位置。 因此,虽然mysqldump不是唯一的方法,但它是一个简单且常用的方法,尤其适用于中小型数据库。对于大型数据库,可以考虑使用物理备份工具。 总结:MySQL主从复制初始化时,必须保证主从数据一致,但实现方式不限于mysqldump。选择哪种方法取决于数据量、停机时间要求等因素。 相关问题: 1. 使用Percona XtraBackup进行MySQL主从复制初始化的步骤是什么? 2. 在配置主从复制时,如何确保备份过程中主库的数据一致性? 3. 除了mysqldump和XtraBackup,还有哪些方法可以初始化MySQL从库?</think>### MySQL主从复制初始化是否必须使用mysqldump? **不一定必须使用mysqldump**,但**必须保证主从数据初始状态一致**。mysqldump是最常用的方法之一,但还有其他替代方案。以下是详细说明: --- ### 一、为什么需要初始数据同步? 主从复制的核心是**基于二进制日志的位置同步**。如果从库没有与主库相同的初始数据状态: 1. 复制启动时可能出现`Error 1146: Table doesn't exist`等错误[^1] 2. 后续同步可能因数据不一致导致SQL线程中断 3. 唯一键冲突、外键约束失败等风险增加 --- ### 二、可行的初始化方法对比 | 方法 | 适用场景 | 优点 | 缺点 | |------|----------|------|------| | **`mysqldump`**<br>(引用[1][2]) | 中小型数据库<br>(<100GB) | ✅ 操作简单<br>✅ 自动记录binlog位置<br>✅ 支持热备份 | ⚠️ 大数据库耗时<br>⚠️ 锁表风险 | | **物理备份**<br>(如XtraBackup) | 大型数据库<br>(>100GB) | ✅ 备份/恢复速度快<br>✅ 不锁表<br>✅ 保持文件级一致性 | ⚠️ 配置较复杂<br>⚠️ 需手动记录binlog位置 | | **文件系统快照**<br>(如LVM/ZFS) | 大型数据库<br>有存储支持 | ✅ 瞬时完成备份<br>✅ 零性能影响 | ⚠️ 依赖存储硬件<br>⚠️ 需停机维护 | | **主库停机拷贝** | 可接受停机 | ✅ 绝对一致性 | ⚠️ 业务中断<br>⚠️ 手动处理binlog | > 📌 关键点:无论何种方法,**必须记录备份时的主库binlog位置**(`File`和`Position`),用于`CHANGE MASTER TO`命令。 --- ### 三、mysqldump最佳实践(推荐) ```bash # 主库执行(热备份) mysqldump --single-transaction --master-data=2 -uroot -p --routines --events --triggers --all-databases > full_backup.sql # 从库恢复 mysql -uroot -p < full_backup.sql ``` **参数说明**: - `--single-transaction`:InnoDB表非锁定备份 - `--master-data=2`:自动写入`CHANGE MASTER TO`语句(注释状态) - `--routines --events --triggers`:备份存储过程/事件/触发器 --- ### 四、替代方案示例:XtraBackup物理备份 ```bash # 主库备份 xtrabackup --backup --target-dir=/backup/ xtrabackup --prepare --target-dir=/backup/ # 记录binlog位置 cat /backup/xtrabackup_binlog_info > position.txt # 输出: mysql-bin.000008 1074 # 拷贝到从库 rsync -av /backup/ slave:/var/lib/mysql/ # 从库启动前 xtrabackup --copy-back --target-dir=/backup/ chown -R mysql:mysql /var/lib/mysql ``` --- ### 五、特殊场景处理 1. **空库初始化** 若主库是全新无数据的,可直接在从库创建相同结构的空库: ```sql -- 主库导出结构 mysqldump --no-data -uroot -p > schema.sql ``` 2. **部分库表复制** 使用`--ignore-table`或指定数据库名: ```bash mysqldump --databases db1 db2 --ignore-table=db1.logs > partial.sql ``` 3. **GTID模式** 需额外添加`--set-gtid-purged=OFF`参数[^2]: ```bash mysqldump --set-gtid-purged=OFF --master-data=2 ... ``` --- ### 结论 1. **非必须但强烈推荐**:mysqldump是简单可靠的选择,尤其适合大多数场景 2. **核心原则**:必须确保主从初始数据一致性,并准确记录binlog位置 3. **方法选择**: - <100GB → `mysqldump` - >100GB → `XtraBackup` - 大数据/有存储支持 → 文件系统快照 > ⚠️ 无论采用何种方法,**务必验证备份完整性**: > ```sql > -- 从库执行 > CHECKSUM TABLE important_table; > ``` --- ### 相关问题 1. 使用XtraBackup初始化MySQL主从复制的详细步骤是什么? 2. 如何验证主从数据库的初始数据一致性? 3. 在GTID复制模式下初始化从库有哪些特殊注意事项? 4. 主库不停机的情况下如何初始化TB级数据库的从库? 5. 初始化完成后如何监控主从数据同步的健康状态? [^1]: 主从复制不会创建库和表,需确保从库存在对应结构 [^2]: 使用`--master-data=2`可自动记录binlog位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值