MySQL數據庫的主從複製詳解



配置機器:

   master server 192.168.0.40

   slave  server  192.168.0.208  ,此機器上MySQL版本爲5.5.29

接下來開始配置,首先是master server

 

一、master server
1. 配置my.cnf
   vim /etc/my.cnf
  在[mysqld]中添加
   server-id    =1              //1表示爲Master,不需要更改
   log-bin=mysql-bin       //日誌爲二進制,無需更改
   binlog_format=mixed   //二進制日誌的格式,無需更改
   binlog-do-db=chinaetax_2_0              //同步的數據庫(可以有多個)
   binlog-do-db=cms_2_0                       //同步的數據庫
   binlog-ignore-db=mysql,test,information_schema   //不需要同步的數據庫名,多個數據庫中間用逗號(,)隔開
 
 
  然後把innodb前面的#去掉,結果如下
  innodb_data_home_dir = /usr/local/mysql/data/      //innodb的表空間位置
  innodb_data_file_path = ibdata1:50M:autoextend     //表空間的名字,開始50M
  innodb_log_group_home_dir = /usr/local/mysql/data/ 
  innodb_buffer_pool_size = 256M                     //爲系統內存的50-80%
  innodb_additional_mem_pool_size = 20M
  innodb_log_file_size = 64M
  innodb_log_buffer_size = 8M
  innodb_flush_log_at_trx_commit = 1
  innodb_lock_wait_timeout = 50
 
  然後重啓數據庫,讓配置文件生效
  #service mysqld restart
或者  先停止mysql服務,再開啓服務
  #service mysqld stop
  #/etc/init.d/mysqld start
 
2、在master server上添加授權賬號,用於slave server對master server的訪問
 
 格式:GRANT REPLICATION SLAVE ON *.* TO '帳號'@'從服務器IP或主機名' IDENTIFIED BY '密碼';

 登錄mysql服務器
    #mysql -u root -p
 授權
    mysql>grant replication slave on *.* to repluser@'192.168.0.208' identified by '123456';
 刷新權限列表
    mysql>flush privileges;
 

 
3、備份master server上數據庫(兩種方式)
第一種:
  mysql> flush tables with read lock;  //讀鎖
 
  同時要記錄下mysql-bin.000006和1135164
  mysql> show master status;

+----------------------------+---------- +--------------------------- + --------------------------------------------------------------------+
| File                               | Position | Binlog_Do_DB         | Binlog_Ignore_DB                                                          |
+----------------------------+---------- +--------------------------- + --------------------------------------------------------------------+
| mysql-bin.000006     |1135164 | chinaetax,cms_2_0    | mysql,information_schema,performance_schema,|
+---------------------------- +---------- +--------------------------- + --------------------------------------------------------------------+
1 row in set (0.00 sec)
1 row in set (0.01 sec)
取得快照並記錄日誌名和偏移量
 
開啓另一個終端對主服務器數據目錄做備份。
#cd /usr/local/mysql/data
#tar -zcvf backup.tar.gz www blog
 
此時在主庫解開table的鎖定
mysql> unlock tables;
 
第二種:
#mysqldump -uroot -p -l -F databasename > 路徑
 
二、slave server
 
1. vim /etc/my.cnf
  log-bin=mysql-bin                                           // 開啓bin-log日誌
  binlog_format=mixed
  server-id  = 2                                                  //server-id不能和master server相同,即不能爲1
  master-host     =   192.168.0.40                        //以下5個配置項在mysql5.5版本以後廢棄
  master-user     =   repluser
  master-password =   123456
  master-port     =  3306
  master-connect-retry=60
  replicate-do-db=chinaetax_2_0   //告訴slave只做www數據庫的更新 
  replicate-do-db=cms_2_0           //告訴slave只做blog數據庫的更新 

  一開始,我也是按照上面這樣配置的,可是,服務器總是啓動不了,報這樣的錯誤,不知大家有沒有遇到過,
  The server quit without updating PID file,
後來,查看mysql錯誤日誌,是這樣寫的,
 
最後在官網上,看到了這個

終於明白了

 !!!注意:從MySQL5.5版本開始,master-host,master-user,master-password,等變量已移除,所以纔會出現上面的錯誤,可以在登錄mysql服務器控制檯後,用change master to命令動態改變配置
所以,如果mysql版本是5.5以上,這一步只需配置前三項和後兩項即可,然後重啓服務器
#service mysqld start

2、把從主數據庫服務器備份出來的數據庫導入到從服務器中
  先用scp把主服務器上的backup.tar.gz拷貝過來,解壓到/usr/local/mysql/data目錄
   #scp backup.tar.gz 192.168.0.208:/usr/local/mysql/data
   #cd /usr/local/mysql/data
   #tar -xzvf backup.tar.gz
 
  如果是用mysqldump備份的數據庫,在208服務器上直接用mysql命令導入數據庫即可,過程略過
 
 
3、對於mysql 5.5以上,這一步必須配置

  停止slave服務,設置主服務器的各種參數
     mysql>slave stop;
  然後敲入以下代碼,一行一行的複製
     mysql>change master to
                MASTER_HOST='192.168.0.40',
                MASTER_USER='repluser',
                MASTER_PASSWORD='123456',
                MASTER_LOG_FILE='mysql-bin.000006',
                MASTER_LOG_POS=1135164;
    mysql> slave start;
 
OK,以上配置結束。

 敲入以下命令,查看是否配置成功。
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.40
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos:1135164
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 617
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: chinaetax_2_0,cms_2_0
          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: 1271
              Relay_Log_Space: 773
              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:
1 row in set (0.01 sec)
 
 在以上各項中,保證以下兩項爲Yes,說明成功。
 
           Slave_IO_Running
               是否要從 Master Server 複製 Binary Log日誌,必須爲 Yes
 
           Slave_SQL_Running
               是否要執行從 Master Server複製過來的 Binary Log日誌,必須爲 Yes
 


然後在master上添加數據
再在slave server上查詢,發現數據鬥能更新過來,成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章