0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

怎么设置 mysql 主从复制

Last updated at Posted at 2015-03-27

关于 mysql 的复制

mysql 复制也就是能够让你容易的维护数据的多个拷贝.它很有用的. 如备份数据啊. 在不用主数据库的情况下分析数据, 还有就是扩展.
本文主要介绍 mysql 一个主服务器备份数据到一个备库. 涉及到两个 IP 和机器,可以使用 vagrant 来轻松搞定.

假如我们使用 vagrant 来作本 demo. 两个服务器就是:

  • 192.168.0.100 master
  • 192.168.0.200 slave

安装

sudo apt-get install mysql-sever mysql-client vim

第一步配置主服务器

编辑 mysql 默认配置文件, 主要修改的地方就是修改服务器默认的 IP 地址配置.

sudo vim /etc/mysql/my.cnf

找到 bind-address这个配置项,然后把默认的本地的地址改为当前机器实际在局域网中的地址, 如

bind-address = 192.168.0.1000

接着就是本服务器的标示, server-id, 默认是1,但是是注释了的,放开注释. 还有就是 log-bin 配置项, 这个文件就是用来作为复制的依据,表明它的位置., 还有一个 binlog_do_db, 它用来指定需要复制那些数据库的.如我们复制这个数据库,

binlog_do_db = example

最后,重启数据库.

之后,我们需要登录客户端,给一个假定要复制我们数据的用户给复制权限:

GRANT REPLICATION SLAVE ON . TO 'slave_user'@'%' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

为了避免此时有人写数据,确保当前要复制的库表没有差异, 我们锁住它,我们这样:

use example;
flush tables with read lock;
show master status;

会得到这样的结果:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 | newdatabase  |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

这里会有一个位置,来告诉从哪里进行复制. 注意,如果你在同一个终端下有其他的操作的话,这样会释放这个锁的.所以你需要新开一个窗口. 然后因为有锁,你可以导出数据,

mysqldump -u root -p --opt example > example.sql

你可以释放锁了,现在,

unlock tables;
\q

第二步,配置备服务器

接着我们要搞定备机, 安装 mysql 等都和第一步是一样的. 我们用客户端登录 mysql. 然后创建一个要复制的数据库, 然后导入刚才我们 dump 出来的表结构.

接着,我们同样需要修改 mysql 的配置文件,

server-id               = 2
relay-log              = /var/log/mysql/mysql-relay-bin.log
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db    = example

这个地方,其实我们已经熟悉了他们的意思,但是 relay-log 有点陌生. 你需要这样写. 保存, 重启 mysql

接下来,就是给这个服务器注册主服务器了.:

CHANGE MASTER TO MASTER_HOST='192.168.0.100',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;

它干了几点事情呢?

  1. 指定了当前服务器是那台机器的备机
  2. 登录信息
  3. 告诉服务器从哪里开始复制,

然后,开启复制

start slave

我们看一下当前备机的状态:

show slave status\G

\G 参数可以让输出更加易读, 如果你在了解备机的时候遇到问题,可以通过下面的命令来搞定:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

see more:

  1. 怎么设置 mysql 多主复制
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?