MySQL的主从复制

                           MySQL主从复制

环境:系统内核版本:Linux version 2.6.18-308.el5

Mysql版本: mysql-5.5.28

主服务器IP:172.16.7.1

从服务器IP:172.16.7.2

注意事项:

1.为了避免循环复制,在主从模型中,任何一台服务器彼此间都需要一个ID号标识,而且彼此间绝对不能相同。

2.在主服务器上,并不是每个节点都可以到主服务器上面进行同步复制数据的,因此需要在主机上建立密码帐号,只有持有帐号密码的用户才可以访问复制数据。

3.从服务器开启中继日志

搭建一个简单的主从服务器需要如下基本要求:

对主服务器:

1.每个server-id = 要唯一

2.开启二进制日志

3.创建一个具有复制权限的用户帐号

4.设定二进制日志缓冲区刷写,每当有二进制日志更新,就立即同步

对从服务器:

1.每个server-id = 要唯一

2.开启中继日志

3.以中继用户连接到主服务器就可以

4.设置为只读

如果主服务器已经运行很久了,在主服务器上要创建一个完全备份,而后在从服务器应用此备份,并在连接至主服务器指定二进制日志文件和其事件位置

操作步骤如下:

主服务器配置:

   
   
   
   
  1. vim /etc/my.cnf 
  2. datadir = /data/mydata  #数据所在目录 
  3. server-id = 1   #用于唯一标示自己 
  4. log-bin=/binlog/mysql-bin #二进制日志所在目录,将其和数据分开存放 
  5. sync_binlog=1   #同步二进制日志 

启动mysqld

   
   
   
   
  1. service mysqld start 

进入数据库,给从服务器复制权限

   
   
   
   
  1. mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO rpuser@'172.16.%.%' IDENTIFIED BY 'redhat'
  2. mysql>FLUSH PRIVILEGES; 
  3. mysql>SHOW MASTER STATUS;   //指定从哪儿开始复制 
  4. msql>SHOW BINLOG EVENTS IN 'mysql-bin.000001';  //查看以前的事件 
  5. +------------------+----------+--------------+------------------+ 
  6. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  7. +------------------+----------+--------------+------------------+ 
  8. | mysql-bin.000001 |      354 |              |                  | 
  9. +------------------+----------+--------------+------------------+ 
  10. 1 row in set (0.00 sec)  //记录二进制日志事件发生所在位置 

在从服务器上

安装mysql,添加系统帐号

修改配置文件

   
   
   
   
  1. vim /etc/my.cnf 
  2. datadir = /data/mydata 
  3. #log-bin=mysql-bin   //二进制日志开启功能注释掉 
  4. server-id       = 10     //自己的ID号 
  5. relay-log = /relaylog/mysql-relay   //开启中继日志 
  6. relay-log-index = mysql-relay.index //中继日志索引 
  7. read-only=1  //从服务器只提供读的功能,设定为只读 

启动服务

   
   
   
   
  1. [root@lab ~]#service mysqld start 

进入数据库,设定主服务器

   
   
   
   
  1. mysql>CHANGE MASTER TO  master_host='172.16.7.1', master_user='reuser', master_password='redhat', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=354; 
  2. ###################################### 
  3. master_log_file='mysql-bin.000001' //指定从哪个二进制日志文件开始复制 
  4. master_log_pos=354    //从二进制日志复制的位置 

以上的这两项参数可以通过主服务器中mysql>SHOW MASTER STATUS中获取

启动从服务器

   
   
   
   
  1. mysql>START SLAVE; //默认是两个线程都启动的,如果想要启动一个线程,可以手动指定 
  2. mysql>SHOW SLAVE STATUS\G;//查看从服务器是否启动成功;查看各服务器中变量是否成功启用 

验证:

主服务器:在主服务器上创建数据库查看从服务器是否正常

查看主服务器状态

从服务器是否同步

以上是主服务器中没有数据的情况,假如说从服务器同步主服务器中数据时主服务器中已经存在有数据:

则在同步之前要将主服务器中之前的数据导入到从服务器

Master服务器:

   
   
   
   
  1. mysqldump --all-databases --lock-all-tables --flush-logs --master-data=2 >/tmp/data.sql 
  2. scp /tmp/data.sql lab1:/tmp 
  3. 并记录下主服务器现在的二进制日志及所在位置 
  4. mysql> FLUSH TABLES READ LOCK; 
  5. Query OK, 0 rows affected (0.06 sec) 
  6. mysql> SHOW MASTER STATUS; 
  7. +------------------+----------+--------------+------------------+ 
  8. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  9. +------------------+----------+--------------+------------------+ 
  10. | mysql-bin.000003 |      107 |              |                  | 
  11. +------------------+----------+--------------+------------------+ 
  12. 1 row in set (0.00 sec) 
  13. mysql> UNLOCK TABLES; 
  14. Query OK, 0 rows affected (0.00 sec) 

Slave服务器:

导入主服务器中原有数据

   
   
   
   
  1. mysql < /tmp/data.sql  
  2. mysql>CHANGE MASTER TO  master_host='172.16.7.1', master_user='reuser', master_password='redhat', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=107; 

启动从服务器即可

mysql>START SLAVE;

以上为实验的简单步骤,仅供各位参考。。

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