1、环境说明

MasterIP:192.168.12.150

SlaveIP: 192.168.12.151

2 、yum安装mysql

   
   
   
   
  1. yum install mysql-server -y 

3、配置Master的Mysql,在mysqld模块下添加如下两行;

  1. [root@bogon ~]# vi /etc/my.cnf  
  2. [mysqld] 
  3. server-id = 1  
  4. log-bin=mysql-bin 日志路径及文件名

 4、在Master数据库上设置同步用户,并给用户授权;

   
   
   
   
  1. [root@bogon ~]# mysql -u root 
  2. Welcome to the MySQL monitor.  Commands end with ; or \g. 
  3. Your MySQL connection id is 6 
  4. Server version: 5.0.95-log Source distribution 
  5.  
  6. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 
  7.  
  8. Oracle is a registered trademark of Oracle Corporation and/or its 
  9. affiliates. Other names may be trademarks of their respective 
  10. owners. 
  11.  
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
  13.  
  14. mysql> grant replication slave on *.* to 'rep'@'192.168.12.%' identified by '123456';  
  15. Query OK, 0 rows affected (0.00 sec) 

5、主库锁表,停止数据更新。(锁表的作用是,防止备份数据库的时候,数据库的写入,备份完数据库之后,查看主库的状态)

   
   
   
   
  1. mysql> flush tables with read lock;  

6、查看主库的状态;

   
   
   
   
  1. mysql> show master status; 
  2. +------------------+----------+--------------+------------------+ 
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  4. +------------------+----------+--------------+------------------+ 
  5. mysql-bin.000003 |      234 |              |                  |  
  6. +------------------+----------+--------------+------------------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9. mysql>  

将上面的日志名mysql-bin.000003和偏移量234记录下来,从库将已它作为同步点,它之前的数据我们通过mysqldump、mysql命令导出,导入到从数据库,它之后的数据我们将进行同步。

7、数据库解锁

   
   
   
   
  1. mysql> unlock tables;  

8、修改Slave数据库的配置文件,只需要添加server-id = 2 就ok,并重启mysqld

   
   
   
   
  1. [root@localhost ~]# vi /etc/my.cnf  
  2. [mysqld] 
  3. server-id = 2  
  4. datadir=/var/lib/mysq 
  5. [root@localhost ~]# service mysqld restart Stopping mysqld: [ OK ]

9、在从库中开始手动同步数据库。

   
   
   
   
  1. mysql> change master to master_host='192.168.12.150',master_user='rep',master_password='123456',master_log_file='mysql-bin.000003' ,master_log_pos=234
  2. Query OK, 0 rows affected (0.01 sec) 
  3.  
  4. mysql> start slave;    启动从数据库 
  5. Query OK, 0 rows affected (0.00 sec) 
  6.  
  7. mysql> show slave status \G; 查看状态 
  8. *************************** 1. row *************************** 
  9.              Slave_IO_State: Connecting to master 
  10.                 Master_Host: 192.168.12.150 
  11.                 Master_User: rep 
  12.                 Master_Port: 3306 
  13.               Connect_Retry: 60 
  14.             Master_Log_File: mysql-bin.000003 
  15.         Read_Master_Log_Pos: 234 
  16.              Relay_Log_File: mysqld-relay-bin.000001 
  17.               Relay_Log_Pos: 98 
  18.       Relay_Master_Log_File: mysql-bin.000003 
  19.            Slave_IO_Running: YES
  20.           Slave_SQL_Running: Yes 
  21.             Replicate_Do_DB:  
  22.         Replicate_Ignore_DB:  
  23.          Replicate_Do_Table:  
  24.      Replicate_Ignore_Table:  
  25.     Replicate_Wild_Do_Table:  
  26. Replicate_Wild_Ignore_Table:  
  27.                  Last_Errno: 0 
  28.                  Last_Error:  
  29.                Skip_Counter: 0 
  30.         Exec_Master_Log_Pos: 234 
  31.             Relay_Log_Space: 98 
  32.             Until_Condition: None 
  33.              Until_Log_File:  
  34.               Until_Log_Pos: 0 
  35.          Master_SSL_Allowed: No 
  36.          Master_SSL_CA_File:  
  37.          Master_SSL_CA_Path:  
  38.             Master_SSL_Cert:  
  39.           Master_SSL_Cipher:  
  40.              Master_SSL_Key:  
  41.       Seconds_Behind_Master: NULL 
  42. 1 row in set (0.00 sec) 
  43.  
  44. ERROR:  
  45. No query specified 
  46.  
  47. mysql>  

标红的两个线程显示状态为yes,说明同步成功。

10 、测试主从数据库是否同步成功

主库上创建数据库test,并查看是否创建成功检查从库是否自动创建数据test

   
   
   
   
  1. mysql> create database test; 
  2. Query OK, 1 row affected (0.00 sec) 
  3.  
  4. mysql> show databases; 
  5. +--------------------+ 
  6. | Database           | 
  7. +--------------------+ 
  8. | information_schema |  
  9. | mysql              |  
  10. | test               |  
  11. +--------------------+ 
  12. 3 rows in set (0.00 sec) 

检查从库是否自动创建数据test

   
   
   
   
  1. mysql> show databases; 
  2. +--------------------+ 
  3. | Database           | 
  4. +--------------------+ 
  5. | information_schema |  
  6. | mysql              |  
  7. | test               |  
  8. +--------------------+ 
  9. 3 rows in set (0.00 sec) 
  10.  
  11. mysql> show slave status \G; 
  12. *************************** 1. row *************************** 
  13.              Slave_IO_State: Waiting for master to send event 
  14.                 Master_Host: 192.168.12.150 
  15.                 Master_User: rep 
  16.                 Master_Port: 3306 
  17.               Connect_Retry: 60 
  18.             Master_Log_File: mysql-bin.000004 
  19.         Read_Master_Log_Pos: 777 
  20.              Relay_Log_File: mysqld-relay-bin.004413 
  21.               Relay_Log_Pos: 235 
  22.       Relay_Master_Log_File: mysql-bin.000004 
  23.            Slave_IO_Running: Yes 
  24.           Slave_SQL_Running: Yes 
  25.             Replicate_Do_DB:  
  26.         Replicate_Ignore_DB:  
  27.          Replicate_Do_Table:  
  28.      Replicate_Ignore_Table:  
  29.     Replicate_Wild_Do_Table:  
  30. Replicate_Wild_Ignore_Table:  
  31.                  Last_Errno: 0 
  32.                  Last_Error:  
  33.                Skip_Counter: 0 
  34.         Exec_Master_Log_Pos: 777 
  35.             Relay_Log_Space: 235 
  36.             Until_Condition: None 
  37.              Until_Log_File:  
  38.               Until_Log_Pos: 0 
  39.          Master_SSL_Allowed: No 
  40.          Master_SSL_CA_File:  
  41.          Master_SSL_CA_Path:  
  42.             Master_SSL_Cert:  
  43.           Master_SSL_Cipher:  
  44.              Master_SSL_Key:  
  45.       Seconds_Behind_Master: 0 
  46. 1 row in set (0.00 sec) 
  47.  
  48. ERROR:  
  49. No query specified 
  50.  
  51. mysql>  

主库上删除数据库test,,并查看主库的状态

   
   
   
   
  1. mysql> drop database test; 
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. mysql> show databases; 
  5. +--------------------+ 
  6. | Database           | 
  7. +--------------------+ 
  8. | information_schema |  
  9. | mysql              |  
  10. +--------------------+ 
  11. 2 rows in set (0.00 sec) 

检查从库是否自动删除数据库test,

   
   
   
   
  1. mysql> show databases; 
  2. +--------------------+ 
  3. | Database           | 
  4. +--------------------+ 
  5. | information_schema |  
  6. | mysql              |  
  7. +--------------------+ 
  8. 2 rows in set (0.00 sec) 
  9.  
  10. mysql> show slave status \G; 
  11. *************************** 1. row *************************** 
  12.              Slave_IO_State: Waiting for master to send event 
  13.                 Master_Host: 192.168.12.150 
  14.                 Master_User: rep 
  15.                 Master_Port: 3306 
  16.               Connect_Retry: 60 
  17.             Master_Log_File: mysql-bin.000004 
  18.         Read_Master_Log_Pos: 858 
  19.              Relay_Log_File: mysqld-relay-bin.011065 
  20.               Relay_Log_Pos: 235 
  21.       Relay_Master_Log_File: mysql-bin.000004 
  22.            Slave_IO_Running: Yes 
  23.           Slave_SQL_Running: Yes 
  24.             Replicate_Do_DB:  
  25.         Replicate_Ignore_DB:  
  26.          Replicate_Do_Table:  
  27.      Replicate_Ignore_Table:  
  28.     Replicate_Wild_Do_Table:  
  29. Replicate_Wild_Ignore_Table:  
  30.                  Last_Errno: 0 
  31.                  Last_Error:  
  32.                Skip_Counter: 0 
  33.         Exec_Master_Log_Pos: 858 
  34.             Relay_Log_Space: 235 
  35.             Until_Condition: None 
  36.              Until_Log_File:  
  37.               Until_Log_Pos: 0 
  38.          Master_SSL_Allowed: No 
  39.          Master_SSL_CA_File:  
  40.          Master_SSL_CA_Path:  
  41.             Master_SSL_Cert:  
  42.           Master_SSL_Cipher:  
  43.              Master_SSL_Key:  
  44.       Seconds_Behind_Master: 0 
  45. 1 row in set (0.00 sec) 
  46.  
  47. ERROR:  
  48. No query specified 

自此达到主从同步成功。

总结:主从同步最最要的的得到主库的查看主库的状态;得到File和Position的值mysql-bin.000003 ,234 ,从库同步的时候会用到。

   
   
   
   
  1. mysql> show master status; 
  2. +------------------+----------+--------------+------------------+ 
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  4. +------------------+----------+--------------+------------------+ 
  5. mysql-bin.000003 |      234 |              |                  |  
  6. +------------------+----------+--------------+------------------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9. mysql>  

 因为我们同步的时候是以它作为同步点的,它之后的数据我们将自动同步,它之前的数据我们将通过mysqldump的命令导入的,所以在备份主库的时候我们一定要锁表,(flush tables with read lock; ) 这样数据库就不能写了,File和Position的值mysql-bin.000003 ,234 ,也就不会变化 这样我们就保证了数据同步的完整性。 备份完数据库之后我们就可以通过 unlock tables; 

命令解锁了。然后我们通过在主库上授权的用户在从库上开始第一次手动同步,yihou