MySQL主从复制实操,详细配置步骤

主从复制功能通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间,SELECT查询可以发送到从服务器,以降低主服务器 的查询处理速度,修改数据的语句发送到主服务器,使主从服务器保持同步。

一、工作原理

主从复制通过3个过程实现,其中一个发生在主服务器,其他两个发生在从服务器。

  • 1. 主服务器将用户对数据库的更新操作以二进制格式保存到Binary Log日志文件中,然后通过Binlog Dump线程将Binary Log日志文件传输给从服务器。
  • 2. 从服务器通过一个I/O线程将主服务器 的Binary Log日志文件中的更新操作复制到一个叫Relay Log的中继日志文件中。
  • 3. 从服务器通过另一个SQL线程将Relay Log中继日志文件中的操作依次在本地执行,从而实现主从同步复制。
二、如何配置

假定有两台服务器,方案如下

master: 192.168.1.1    service-id:1
slave : 192.168.1.2    service-id:2    同步账号:sync    同步密码:sync
1. 确定主从服务器的MySQL版本

不同版本的binlog格式可能不一样,最好用同版本,最起码确保主服务器版本不高于从服务器版本。

2. 在主服务器上创建从服务器连接账户,授予REPLICATION SLAVE权限

每个从服务器使用标准的MySQL用户名和密码连接主服务器。创建一个用户名为"sync"的账户,从服务器使用该账户从域内任何主机使用密码"sync"访问主服务器。使用GRANT创建账户复制:

mysql> CREATE USER 'sync'@'%' IDENTIFIED BY 'sync';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.2' IDENTIFIED BY 'sync';
mysql> exit
3. 配置主服务器

打开二进制日志,指定唯一Server ID。例如在my.conf配置文件加入如下值,如果已经有就不用添加了:

[mysqld]
log-bin = mysql-bin
server-id = 1
4. 重启主服务器

进入mysql命令行运行show master status语句查看是否成功,复制File列的mysql-bin.000007备用。

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 |     3151 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5. 配置从服务器

与主服务器配置类似,配置唯一的Server ID:

[mysqld]
log-bin = mysql-bin
server-id = 2
6. 重启从服务器

准备让从服务器连接到主服务器,并开始重做主服务器binlog文件中的事件。

7. 指定主服务器信息

使用CHANGE MASTER TO语句指定主服务器信息,不要在配置文件中设置。下述语句可以替代在配置文件中提供主服务器的信息,此外,不需要停止服务器,就直接为从服务器指定不同的主服务器,语句如下:

mysql> CHANGE MASTER TO MASTER_HOST = '192.168.1.1',
     -> MASTER_USER = 'sync',
     -> MASTER_PASSWORD = 'sync',
     -> MASTER_LOG_FILE = 'mysql-bin.000007',
     -> MASTER_LOG_POS = 3151;

指定MASTER_LOG_POS为0是希望从日志的开始位置开始读。

三、连接主从服务器
1. 执行START SLAVE语句开始复制:
mysql> START SLAVE;
2. 查看同步结果

主要查看Slave_IO_State、Slave_IO_Running和Slave_SQL_Running

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.1
                  Master_User: sync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 3151
               Relay_Log_File: hecs-222032-relay-bin.000002
                Relay_Log_Pos: 1079
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 3151
              Relay_Log_Space: 1292
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 33a67c62-7ac3-11ed-b035-fa163e7dd5de
             Master_Info_File: /www/server/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

如上Slave_IO_Running和Slave_SQL_Running都为Yes就代表成功了。

3. 查看主服务器的I/O线程创建的连接

第2行的2.row就是处理从服务器的I/O线程的连接。

mysql> SHOW PROCESSLIST\G
4. 查看从服务器的I/O线程创建的连接

第1行为I/O线程状态,第二行为SQL线程状态。

mysql> SHOW PROCESSLIST\G

注意:从服务器是通过读取主服务器的二进制日志文件实现自我更新,对数据库进行的修改操作都应该放在主服务器上执行,从服务器只用来查询,这也是所谓的读写分离。

错误2:

Last_IO_Errno: 1130
Last_IO_Error: error connecting to master 'sync@192.168.1.1:3306' - retry-time: 60  retries: 1

解决方案:查看3306端口是否放通,查看sync账号是否正确创建,查看是否授权本机IP访问等等。

错误2:

Last_IO_Errno: 1045
Last_IO_Error: error connecting to master 'sync@192.168.1.1:3306' - retry-time: 60  retries: 1

解决方案:使用 show slave status\G 命令查看,确保MASTER_LOG_FILE和MASTER_LOG_POS 与master保持一致,查看master机器中指定账户的授权

mysql> show grants for 'sync'@'192.168.1.2';
+-----------------------------------------------------------+
| Grants for sync@192.168.1.2                               |
+-----------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.2'    |
+-----------------------------------------------------------+
1 row in set (0.00 sec)

如果不是跟上面的输出有出入,建议回到本人第二步正确配置授权。

PS:主主部署、双机热备只需要按照上述步骤,将server1作为从机,server2作为主机再操作一遍即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容