mysql主从复制

mysql的主从复制:
一、测试环境:
两台redhat linux5.8虚拟机;
Master:
IP地址:172.16.77.77
MySQL版本:5.5.28
操作系统:RHEL5.8

Slave:
IP地址:172.16.12.7
MySQL版本:5.5.28
操作系统:RHEL5.8


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-05/60212.htm
二、准备工作
1、编译安装mysql,指定数据路径为/data/mydata;用户为mysql(路径和用户都需另行创建);
2、为mysql提供服务脚本,配置文件等等,修改/data/mydata的属主属组为mysql用户(步骤略);
3、分别在两台主机上执行如下命令:
 #hwclock -s
 同步主机的时间
三、主从复制概述
 复制是将主数据库的DML(Data Manipulation
 Language)操作通过日志传到从服务器上,使得从服务器实现了对主服务器的远程备份,并且可以通过应用使得在主服务器繁忙的时候分担一部分负载。mysql
 支持同时向多台从服务器进行复制。这里只测试对主服务器的复制备份功能。
 缺点是主从复制不能同步,只能异步复制。
 mysql的复制是将记录mysql中数据操作指令的二进制文件复制到从服务器上,由从服务器的中继日志负责接收,并执行到数据库中。
四、配置主从复制;
1、主服务器上的相应设置:
配置文件的修改:
log-bin=mysql-bin
server-id = 1
确保开启主的二进制日志功能,给主指定一个id,要确保主从的id不能相同。

为了确保数据安全,在主服务器上创建一个账户,授予其相应的复制权限:

  
  
  
  
  1. mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO weiyang@'172.16.%.%' IDENTIFIED BY 'weiyang';
  2. mysql> FLUSH TABLES WITH READ LOCK; ##给所有表加上只读锁定,以便从服务器复制数据##
  3. mysql> SHOW MASTER STATUS;
  4. +------------------+----------+--------------+------------------+
  5. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  6. +------------------+----------+--------------+------------------+
  7. | mysql-bin.000020 | 107 | | |
  8. +------------------+----------+--------------+------------------+
  9. 1 row in set (0.00 sec)
  10. ##得到主的当前二进制日志的位置和偏移量,以此为从服务器复制的坐标。##

2、从服务器上的相应设置:
配置文件的修改:
#log-bin=mysql-bin
server-id = 7
relay-log=relay-mysql
relay-log-index=relay-mysql.index
从服务器不需要其他主机来同步二进制日志文件,故可注销此选项;设置从服务器的id为7;
后两行则是开启从服务器上的中继日志,以链接到主服务器上同步二进制日志。

执行如下命令,指定同步的主机名,身份,以及二进制日志偏移量:

 

  
  
  
  
  1. mysql> CHANGE MASTER TO MASTER_HOST='172.16.77.77',  
  2.      > MASTER_USER='weiyang',  
  3.      > MASTER_PASSWORD='weiyang',  
  4.      > MASTER_LOG_FILE='mysql-bin.000020',  
  5.      > MASTER_LOG_POS=107;  
  6.        
  7. #执行命令:#  
  8. mysql> START SLAVE;    #开启从服务器上的slave线程#  
  9. mysql> show processlist;  
  10. +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+  
  11. | Id | User        | Host      | db   | Command | Time | State                                                                       | Info             |  
  12. +----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+  
  13. |  1 | system user |           | NULL | Connect |   28 | Waiting for master to send event      
  14. ##查看slave进程,已连接上master,等待接收并执行主的二进制日志。##  
  15.  
  16. mysql> show slave status\G;               ##查看slave的工作状态##  
  17. *************************** 1. row ***************************  
  18.                Slave_IO_State: Waiting for master to send event  
  19.                   Master_Host: 172.16.77.77  
  20.                   Master_User: weiyang  
  21.                   Master_Port: 3306  
  22.                 Connect_Retry: 60  
  23.               Master_Log_File: mysql-bin.000020  
  24.           Read_Master_Log_Pos: 224  
  25.                Relay_Log_File: relay-mysql.000012  
  26.                 Relay_Log_Pos: 370  
  27.         Relay_Master_Log_File: mysql-bin.000020  
  28.              Slave_IO_Running: Yes  
  29.             Slave_SQL_Running: Yes  
  30.             。。。。。。。。。。  
  31.             。。。。。。。。。。  
  32. #################             
  33. 主要检查Slave_IO_Running 和Slave_SQL_Running 这两个进程状态是否是yes,这两个进程的含义如下:  
  34. Slave_IO_Running:此进程负责slave 从master 服务器上读取binlog 日志,并写入slave 服务器上的中继日志中  
  35. Slave_SQL_Running:此进程负责读取并且执行中继日志中的binlog 日志  
  36. ################# 

五、测试主从复制
在主服务器上的test数据库中创建一个表:

 

  
  
  
  
  1. mysql> show databases;  
  2. +---------------------+  
  3. | Database            |  
  4. +---------------------+  
  5. | information_schema  |   
  6. | #mysql50#lost+found |   
  7. | mysql               |   
  8. | performance_schema  |   
  9. | test                |   
  10. +---------------------+  
  11. 5 rows in set (0.01 sec)  
  12.  
  13. mysql> use test;  
  14. Reading table information for completion of table and column names  
  15. You can turn off this feature to get a quicker startup with -A  
  16.  
  17. Database changed  
  18. mysql> show tables;  
  19. +----------------+  
  20. | Tables_in_test |  
  21. +----------------+  
  22. | fuyaxu         |   
  23. | moziyan        |   
  24. | weiyang        |   
  25. +----------------+  
  26. 3 rows in set (0.00 sec)  
  27.  
  28. mysql> CREATE TABLE sumoan (id int not null,name varchar(20));  
  29. Query OK, 0 rows affected (0.07 sec)  
  30.  
  31. mysql> show tables;  
  32. +----------------+  
  33. | Tables_in_test |  
  34. +----------------+  
  35. | fuyaxu         |   
  36. | moziyan        |   
  37. | sumoan         |   
  38. | weiyang        |   
  39. +----------------+  
  40. 4 rows in set (0.01 sec)  
  41.  
  42. ###表已创建成功,切到从服务器上查看有没有同步此操作;###  
  43.  
  44. 从服务器:  
  45. mysql> use test;  
  46. Database changed  
  47. mysql> show tables;  
  48. +----------------+  
  49. | Tables_in_test |  
  50. +----------------+  
  51. | fuyaxu         |  
  52. | moziyan        |  
  53. +----------------+  
  54. 2 rows in set (0.00 sec)  
  55.  
  56. mysql> show tables;  
  57. +----------------+  
  58. | Tables_in_test |  
  59. +----------------+  
  60. | fuyaxu         |  
  61. | moziyan        |  
  62. | sumoan         |  
  63. +----------------+  
  64. 3 rows in set (0.00 sec) 

从服务器上能查看到此表,mysql的主从复制已配置成功;
同步完成后在主服务器上执行如下命令:
 

  
  
  
  
  1. mysql> UNLOCK TABLES; #重置读锁定#

 

你可能感兴趣的:(mysql,主从复制)