現在生産環境mysql資料庫是一主一從,由于業務量通路不斷增大,故再增加一台從庫。前提是不能影響線上業務使用,也就是說不能重新開機mysql服務,為了避免出現其他情況,選擇在網站通路量低峰期時間段操作。
伺服器資訊:
主庫:192.168.18.212(原有)
從庫1:192.168.18.213(原有)
從庫2:192.168.18.214(新增)
資料庫版本:mysql5.5
存儲引擎:innodb
測試庫名:weibo
<a target="_blank"></a>
mysql主從是基于binlog日志,是以在安裝好資料庫後就要開啟binlog。這樣好處是,一方面可以用binlog恢複資料庫,另一方面可以為主從做準備。
原有主庫配置參數如下:
<code># vi my.cnf</code>
<code>server-id = 1 #id要唯一</code>
<code>log-bin = mysql-bin #開啟binlog日志</code>
<code>auto-increment-increment = 1 #在ubuntu系統中mysql5.5以後已經預設是1</code>
<code>auto-increment-offset = 1</code>
<code>slave-skip-errors = all #跳過主從複制出現的錯誤</code>
<code>mysql> grant all on *.* to 'sync'@'192.168.18.%' identified by 'sync';</code>
<code>server-id = 3 #這個設定3</code>
<code>auto-increment-increment = 1 #這兩個參數在ubuntu系統中mysql5.5以後都已經預設是1</code>
<code># mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql</code>
參數說明:
--routines:導出存儲過程和函數
--single_transaction:導出開始時設定事務隔離狀态,并使用一緻性快照開始事務,然後unlock tables;而lock-tables是鎖住一張表不能寫操作,直到dump完畢。
--master-data:預設等于1,将dump起始(change master to)binlog點和pos值寫到結果中,等于2是将change master to寫到結果中并注釋。
<code># scp weibo.sql [email protected]:/home/root</code>
<code>mysql> create table test_tb(id int,name varchar(30));</code>
<code># mysql -uroot -p123 -e 'create database weibo;'</code>
<code># mysql -uroot -p123 weibo < weibo.sql</code>
<code># head -25 weibo.sql</code>
<code>-- change master to master_log_file='mysql-bin.000001', master_log_pos=107; #大概22行</code>
<code>mysql> change master to master_host='192.168.18.212',</code>
<code>-> master_user='sync',</code>
<code>-> master_password='sync',</code>
<code>-> master_log_file='mysql-bin.000001',</code>
<code>-> master_log_pos=107;</code>
<code>mysql> start slave;</code>
<code></code>
<code>mysql> show slave status\g;</code>
<code>error 2006 (hy000): mysql server has gone away</code>
<code>no connection. trying to reconnect...</code>
<code>connection id: 90</code>
<code>current database: *** none ***</code>
<code>*************************** 1. row ***************************</code>
<code>slave_io_state: waiting for master to send event</code>
<code>master_host: 192.168.18.212</code>
<code>master_user: sync</code>
<code>master_port: 3306</code>
<code>connect_retry: 60</code>
<code>master_log_file: mysql-bin.000001</code>
<code>read_master_log_pos: 358</code>
<code>relay_log_file: mysqld-relay-bin.000003</code>
<code>relay_log_pos: 504</code>
<code>relay_master_log_file: mysql-bin.000001</code>
<code>slave_io_running: yes</code>
<code>slave_sql_running: yes</code>
<code>......</code>
可以看到io和sql線程均為yes,說明主從配置成功。
<code>mysql> show tables;</code>
<code>+---------------------------+</code>
<code>| tables_in_weibo |</code>
<code>| test_tb |</code>
發現剛才模拟建立的test_tb表已經同步過來!
在上面配置基礎上做實驗,先删除掉從庫配置:
<code>mysql> stop slave; #停止同步</code>
<code>mysql> reset slave; #清除從連接配接資訊</code>
<code>mysql> show slave status\g; #再檢視從狀态,可以看到io和sql線程都為no</code>
<code>mysql> drop database weibo; #删除weibo庫</code>
此時,從庫現在和新裝的一樣,繼續前進!
<code># innobackupex --user=root --password=123 ./</code>
生成一個以時間為命名的備份目錄:2015-07-01_16-49-43
<code># ll 2015-07-01_16-49-43/</code>
<code>total 18480</code>
<code>drwxr-xr-x 5 root root 4096 jul 1 16:49 ./</code>
<code>drwx------ 4 root root 4096 jul 1 16:49 ../</code>
<code>-rw-r--r-- 1 root root 188 jul 1 16:49 backup-my.cnf</code>
<code>-rw-r----- 1 root root 18874368 jul 1 16:49 ibdata1</code>
<code>drwxr-xr-x 2 root root 4096 jul 1 16:49 mysql/</code>
<code>drwxr-xr-x 2 root root 4096 jul 1 16:49 performance_schema/</code>
<code>drwxr-xr-x 2 root root 12288 jul 1 16:49 weibo/</code>
<code>-rw-r--r-- 1 root root 21 jul 1 16:49 xtrabackup_binlog_info</code>
<code>-rw-r----- 1 root root 89 jul 1 16:49 xtrabackup_checkpoints</code>
<code>-rw-r--r-- 1 root root 563 jul 1 16:49 xtrabackup_info</code>
<code>-rw-r----- 1 root root 2560 jul 1 16:49 xtrabackup_logfile</code>
<code># scp -r 2015-07-01_16-49-43 [email protected]:/home/root</code>
<code># sudo rm -rf /var/lib/mysql/</code>
<code># sudo mv 2015-07-01_16-49-43/ /var/lib/mysql</code>
<code># sudo chown mysql.mysql -r /var/lib/mysql</code>
<code># sudo /etc/init.d/mysql start</code>
<code># ps -ef |grep mysql #檢視已經正常啟動</code>
<code>mysql 8832 1 0 16:55 ? 00:00:00 /usr/sbin/mysqld</code>
<code>mysql> create table test_tb2(id int,name varchar(30));</code>
<code># cat /var/lib/mysql/xtrabackup_info</code>
<code>uuid = 201af9db-1fce-11e5-96b0-525400e4239d</code>
<code>name =</code>
<code>tool_name = innobackupex</code>
<code>tool_command = --user=root --password=... ./</code>
<code>tool_version = 1.5.1-xtrabackup</code>
<code>ibbackup_version = xtrabackup version 2.2.11 based on mysql server 5.6.24 linux (x86_64) (revision id: )</code>
<code>server_version = 5.5.43-0ubuntu0.12.04.1-log</code>
<code>start_time = 2015-07-01 16:49:43</code>
<code>end_time = 2015-07-01 16:49:46</code>
<code>lock_time = 1</code>
<code>binlog_pos = filename 'mysql-bin.000001', position 429 #這個位置</code>
<code>innodb_from_lsn = 0</code>
<code>innodb_to_lsn = 1598188</code>
<code>partial = n</code>
<code>incremental = n</code>
<code>format = file</code>
<code>compact = n</code>
<code>compressed = n</code>
<code>-> master_log_pos=429;</code>
<code>read_master_log_pos: 539</code>
<code>relay_log_file: mysqld-relay-bin.000002</code>
<code>relay_log_pos: 363</code>
<code>| test_tb2 |</code>
發現剛才模拟建立的test_tb2表已經同步過來。
<b>原文釋出時間為:2015-07-10</b>
<b></b>
<b>本文來自雲栖社群合作夥伴“linux中國”</b>