首頁 >後端開發 >php教程 >不停止 MySQL 服務增加從函式庫的兩種方式

不停止 MySQL 服務增加從函式庫的兩種方式

WBOY
WBOY原創
2016-07-25 08:46:521101瀏覽
現在生產環境mysql資料庫是一主一從,由於業務量存取不斷增大,故再增加一台從庫。前提是不能影響線上業務使用,也就是說不能重啟MySQL服務,為了避免其他情況,選擇在網站訪問量低高峰期時間段操作。
一般在線增加從庫有兩種方式,一種是透過mysqldump備份主庫,恢復到從庫,mysqldump是邏輯備份,數據量大時,備份速度會很慢,鎖表的時間也會很長。另一種是透過xtrabackup工具備份主庫,恢復到從庫,xtrabackup是實體備份,備份速度快,不鎖表。為什麼不鎖表?因為自身會監控主庫日誌,如果有更新的數據,就會先寫到一個檔案中,然後再回歸到備份檔案中,從而保持資料一致性。
服務器信息:
主庫:192.168.18.212(原有)
從庫1:192.168.18.213(原有)
從庫2:192.168.18.214(新增)
資料庫版本:MySQL5.5
儲存引擎:Innodb
測試庫名:weibo
測試庫名:weibo
>一、mysqldump方式
MySQL主從是基於binlog日誌,所以在安裝好資料庫後就要開啟binlog。這樣好處是,一方面可以用binlog恢復資料庫,另一方面可以為主從做準備。
原有主函式庫設定參數如下:
# vi my.cnf
server-id = 1             #id要
要為
auto-increment-increment= 1   #在Ubuntu系統中MySQL5.5以後已經預設是1
slave-skip-errors =all      #跳過主從複製出現的錯誤
1. 主函式庫建立同步帳號
mysql> grant all on*.* to 'sync'@ '192.168.18.%' identified by 'sync';
2. 從函式庫設定MySQL
# vi my.cnf
log-bin = mysql-bin         #開啟binlog日誌
auto-increment-increment= 1   #這兩個參數在MyUbuntu系統以後都已經預設是🎜>
auto-increment-offset = 1
slave-skip-errors =all      #跳過主從複製出現的錯誤
3. 備份主庫#跳過主從複製出現的錯誤
3. 備份主庫#跳過主從複製出現的錯誤
3. 備份主庫# ># mysqldump -uroot -p123--routines --single_transaction --master-data=2 --databases weibo >weibo.sql
參數說明:
--routines:導出預存程序和函數
--single_transaction:導出開始時設定事務隔離狀態,並使用一致性快照開始事務,然後unlock tables;而lock-tables是鎖定一張表不能寫操作,直到dump完畢。
--master-data:預設等於1,將dump起始(change master to)binlog點和pos值寫到結果中,等於2是將changemaster to寫到結果中並註解。
4. 把備份庫拷貝到從庫
# scp weibo.sqlroot@192.168.18.214:/home/root
5. 在主庫建立test_tb表,模擬資料庫新增數據,weibo.sql是沒有的
mysql> create tabletest_tb(id int,name varchar(30));
6. 從庫導入備份庫
# mysql -uroot -p123 -e'create database weibo;'
# mysql -uroot -p123weibo
7. 在備份檔案.sql查看binlog與pos值
# head -25 weibo.sql
-- CHANGE MASTER TOMA_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; >
8. 從這個庫設定從這個日誌點同步,並啟動
mysql> change masterto master_host='192.168.18.212',
    -> master_user='sync' 🎜>
    -> master_password='sync',
    -> master_log_file='mysql-bin.000001',
 🎜> > start slave;
mysql> show slavestatusG;
ERROR 2006 (HY000): MySQLserver has gone away
No connection.D.
Connection id:    90
Current database: ***NONE ***
********************* ******1. row ***************************
               Slave_IO_State: Waiting formaster to send event
                  Master_Host: 192.168.18.212
                        Master_Port: 3306
              Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 358
                       Relay_Log_Pos: 504
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
可以看到IO和SQL執行緒均為YES,說明主從設定成功。
mysql> show tables;
---------------------------
| Tables_in_weibo           |
---------------------------
| test_tb       >發現剛才模擬建立的test_tb表已經同步過來!
二、xtrabackup方式(建議)
在上面設定基礎上做實驗,先刪除掉從庫設定:
mysql> stopslave; #停止同步
mysql> resetslave;        #清除從連接資訊
mysql> show slavestatusG;   #再查看從狀態,可以看到IO和SQLSQL> show slavestatusG;   #再查看從狀態,可以看到IO和SQLSQL> >mysql> drop databaseweibo;   #刪除weibo庫
此時,從庫現在和新裝的一樣,繼續前進!
1. 主庫使用xtrabackup備份
# innobackupex--user=root --password=123 ./
產生一個以時間為命名的備份目錄:2015 -07-01_16-49-43
# ll 2015-07-01_16-49-43/
total 18480
total 18480
drwrootr-x 16:49 ./
drwx------ 4 rootroot     4096 Jul  1 16:49 ../
-rw-r--r-- 1 rootroot :49 backup-my.cnf
-rw-r----- 1 root root18874368 Jul  1 16:49 ibdata1
drwxr-xr-x 2 rootroot     4096 Jul  1 16:49 performance_schema/
drwxr-xr-x 2 1 >
-rw-r--r-- 1 rootroot       21 Jul  1 16:49 xtrabackup_binlog_info
-rw-r----- 1 root  root? -r--r-- 1 rootroot      563 Jul  1 16:49 xtrabackup_info
-rw-r----- 1 rootroot     2560 Jul 目錄拷貝到從庫上
# scp -r2015-07-01_16-49-43 root@192.168.18.214:/home/root
3. 從庫上把,刪除datadir目錄,將備份目錄重新命名為datadir目錄
# sudo rm -rf/var/lib/mysql/
# sudo mv2015-07-01_16-49-43/ /# sudo mv2015-07-01_16-49-43/ / var/lib/mysql
# sudo chown mysql.mysql-R /var/lib/mysql
# sudo /etc/init.d/mysqlstart
# ps - ef |grep mysql    #查看已經正常啟動
mysql     8832    1  0 16:55 ?        00:00:00 /usr/sbin/mysqld
4.2資料庫建立主庫紙> create tabletest_tb2(id int,name varchar(30));
5. 從備份目錄中xtrabackup_info檔案取得到binlog和pos位置
# cat/var/lib/my/xtrabackup_info
uuid =201af9db-1fce-11e5-96b0-525400e4239d
name =
tool_name = innobackup>exphap .... ./
tool_version =1.5.1-xtrabackup
ibbackup_version =xtrabackup version 2.2.11 based on MySQL server 5.6.24 (x86_64) (x86_64) (ivisiond 🎜>server_version =5.5.43-0ubuntu0.12.04.1-log
start_time = 2015-07-0116:49:43
end_time = 2015-07. 🎜>
lock_time = 1
binlog_pos = filename'mysql-bin.000001', position 429    #這個位置
innodb_from_ls = 03818900l_f
partial = N
incremental = N
format = file
compact = N
compressed = N
compact = N
compressed = N
compact = N
compressed = N
compact = N
compressed = N
compact = N
compressed = N
6 . 從庫設定從這個日誌點同步,並啟動
mysql> change masterto master_host='192.168.18.212',
    -> master_user='sync',
    -> master_user='sync',
master_password='sync',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=429;
    -> master_log_pos=429;🎜> 🎜>
mysql> show slavestatusG;
***************************1. row **** ***********************
               Slave_IO_State: Waiting formaster to send event
  
                  Master_User: sync
                    Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
 🎜>               Relay_Log_File:mysqld-relay-bin.000002
               Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
  Slave_IO_Running Yes
......
7. 從庫查看weibo庫裡面的表
可以看到IO和SQL線程均為YES,說明主從配置成功。
mysql> show tables;
---------------------------
| Tables_in_weibo           |
---------------------------
| test_tb       >| test_tb2                  |
發現剛才模擬所建立的test_tb2表已同步。
免費領取兄弟連IT教育原創linux運維工程師影片/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/
學PHP、Linux 、HTML5、UI、Android等影片教學(課件筆記影片)!聯絡Q2430675018
參加活動領取兄弟連原創視訊教學光碟合集:http://www.lampbrother.net/newcd.html

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn