Mysql 主从复制

本贴最后更新于 2030 天前,其中的信息可能已经斗转星移

Mysql 主从复制

MySQL 数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。

原理
mysql 要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫 A,从服务器叫 B;主从复制就是 B 跟着 A 学,A 做什么,B 就做什么。那么 B 怎么同步 A 的动作呢?
现在 A 有一个日志功能,把自己所做的增删改查的动作全都记录在日志中,B 只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。

实现主从复制需要进行的配置

主数据库:

  • 开启二进制日志
  • 配置唯一的 server-id
  • 创建一个用于 slave 和 master 通信的用户账号
  • 获取 master 二进制日志文件名和位置

从数据库:

  • 配置唯一的 server-id
  • 使用 master 分配的用户账号读取 master 二进制日志
  • 启用 slave 服务

配置操作

这里我就简单实现了一主一从的配置,所以只需要一个主数据库和从数据库,两个数据库版本最好一致。

主数据库操作:

1.修改 mysql 配置文件 my.cnf,插入:

server-id=1 #设置server-id,确保这个server-id唯一,即没有被集群种的MYSQL使用

2.授权给从服务器(这里需要自行更改填写):
GRANT REPLICATION SLAVE ON *.* to 'youraccount'@'your_server_ip' identified by 'yourpassword';
这里要重启下 Mysql 服务;

3.查看主数据库状态:
SHOW MASTER STATUS;
记录下图的 File 和 Position 字段值;
imagepng

从数据库操作:

1.同样修改 mysql 配置文件 my.cnf,插入:

server-id=2 #设置server-id,确保这个server-id唯一,即没有被集群种的MYSQL使用

重启下 Mysql 服务;

2.执行同步的 SQL 语句:

CHANGE MASTER TO
  MASTER_HOST='your_server_ip',
  MASTER_USER='youraccount',
  MASTER_PASSWORD='yourpassword',
  MASTER_LOG_FILE='binlog.000005',
  MASTER_LOG_POS=3378;

3.启动 Slave 同步进程:
start slave;

4.查看 slave 状态:
show slave status\G;

imagepng

这里只有当 Slave_IO_Running 与 Slave_SQL_Running 的值都必须为 YES,才表明同步正常。
测试下来也是可以的。

需要注意的是:如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:

1.主数据库进行锁表操作,不让数据再进行写入动作:
FLUSH TABLES WITH READ LOCK;
2.查看主数据库状态:
show master status;
3.记录下 FILE 及 Position 的值,将主服务器的数据文件复制到从服务器,再进行同步配置;
4.取消主数据库锁定:
UNLOCK TABLES;


  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...