程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
搜索
設為首頁
加入收藏
首頁
編程語言
C語言
|
JAVA編程
Python編程
網頁編程
ASP編程
|
PHP編程
JSP編程
數據庫知識
MYSQL數據庫
|
SqlServer數據庫
Oracle數據庫
|
DB2數據庫
程式師世界
>>
數據庫知識
>>
MYSQL數據庫
>>
關於MYSQL數據庫
>> Mysql主從同步備份策略分享
Mysql主從同步備份策略分享
編輯:關於MYSQL數據庫
環境:
主從服務器上的
MySQL
數據庫版本同為
5.1.34
主機
IP
:
192.168.0.1
從機
IP
:
192.168.0.2
一
.
MySQL
主服務器配置
1.
編輯配置
文件/etc/my.cnf
#
確保有如下行
server-id
=
1
log-bin=mysql-bin
binlog-do-db=mysql
#
需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可
binlog-ignore-db=mysql
#
不需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可
log-slave-updates
#
這個參數一定要加上,否則不會給更新的記錄些到二進制文件裡
slave-skip-errors
#
是跳過錯誤,繼續執行復制操作
2.
建立用戶
mysql>
grant
replication
slave
on
*.*
to
[email protected]
identified
by
‘111111′;
#
grant
replication
slave
on
*.*
to
‘
用戶名
'@'
主機
'
identified
by
‘
密碼
';
#
可在
Slave
上做連接測試
:
mysql
-h
192.168.0.1
-u
test
-p
3.
鎖主庫表
mysql>
FLUSH
TABLES
WITH
READ
LOCK;
4.
顯示主庫信息
記錄
File
和
Position
,從庫設置將會用到
=====================
mysql>
SHOW
MASTER
STATUS;
+------------------+----------+--------------+------------------+
|
File
|
Position
|
Binlog_do_db
|
Binlog_ignore_db
|
+------------------+----------+--------------+------------------+
|
mysql-bin.000001
|
106
|
|
|
+------------------+----------+--------------+------------------+
5.
另開一個終端,打包主庫
cd
/usr/local/mysql
#mysql
庫目錄
tar
zcvf
var.tar.gz
var
============================
二
.MySQL
從服務器配置
1
、傳輸拿到主庫數據包、解包
#
cd
/usr/local/mysql
#
scp
192.168.0.1:/usr/local/mysql/var.tar.gz
.
#
tar
zxvf
var.tar.gz
2
、查看修改
var
文件夾權限
#
chown
-R
mysql:mysql
var
3.
編輯
/etc/my.cnf
server-id=2
log-bin=mysql-bin
master-host=192.168.0.1
master-user=slave
master-password=111111
master-port=3306
replicate-do-db=test
#
需要備份的數據庫名
replicate-ignore-db=mysql
#
忽略的數據庫
master-connect-retry=60
#
如果從服務器發現主服務器斷掉,重新連接的時間差
(
秒
)
log-slave-updates
#
這個參數一定要加上,否則不會給更新的記錄些到二進制文件裡
slave-skip-errors
#
是跳過錯誤,繼續執行復制操作
4
、驗證連接
MASTER
#
mysql
-h192.168.0.1
-uslave
-ppassword
mysql>
show
grants
for
[email protected]
;
5
、在
SLAVE
上設置同步
設置連接
MASTER
MASTER_LOG_FILE
為主庫的
File
,
MASTER_LOG_POS
為主庫的
Position
============================
mysql>
slave
stop;
mysql>
CHANGE
MASTER
TO
MASTER_HOST='192.168.0.1',MASTER_USER='slave',MASTER_PASSWORD='111111',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=106;
6
、啟動
SLAVE
服務
mysql>
slave
start;
7
、查看
SLAVE
狀態
mysql>
SHOW
SLAVE
STATUS\G;
其中
Slave_IO_Running
和
Slave_SQL_Running
兩列的值都為
"Yes"
,表明
Slave
的
I/O
和
SQL
線程都在正常運行。
8
、解鎖主庫表
mysql>
UNLOCK
TABLES;
到此主從庫搭建成功。可以在主庫上插入數據測試同步是否正常。
--------------------------
附:一些錯誤信息的處理,主從服務器上的命令,及狀態信息。
在從服務器上使用
show
slave
status\G
Slave_IO_Running,
為
No,
則說明
IO_THREAD
沒有啟動,請執行
start
slave
io_thread
Slave_SQL_Running
為
No
則復制出錯
,
查看
Last_error
字段排除錯誤後執行
start
slave
sql_thread
查看
Slave_IO_State
字段空
//
復制沒有啟動
Connecting
to
master//
沒有連接上
master
Waiting
for
master
to
send
event//
已經連上
主服務器上的相關命令:
show
master
status
show
slave
hosts
show
logs
show
binlog
events
purge
logs
to
'log_name'
purge
logs
before
'date'
reset
master(
老版本
flush
master)
set
sql_log_bin=
從服務器上的相關命令
:
slave
start
slave
stop
SLAVE
STOP
IO_THREAD
//
此線程把
master
段的日志寫到本地
SLAVE
start
IO_THREAD
SLAVE
STOP
SQL_THREAD
//
此線程把寫到本地的日志應用於數據庫
SLAVE
start
SQL_THREAD
reset
slave
SET
GLOBAL
SQL_SLAVE_SKIP_COUNTER
load
data
from
master
show
slave
status(SUPER,REPLICATION
CLIENT)
CHANGE
MASTER
TO
MASTER_HOST=,
MASTER_PORT=,MASTER_USER=,
MASTER_PASSWORD=
//
動態改變
master
信息
PURGE
MASTER
[before
'date']
刪除
master
端已同步過的日志
6.3.1
Master
同步線程狀態
以下列出了
master
的
Binlog
Dump
線程
State
字段中最常見的幾種狀態。如果在
master
上沒有
Binlog
Dump
線程,那麼同步就沒有在運行。
也就是說,沒有
slave
連接上來。
Sending
binlog
event
to
slave
事件是由二進制日志構成,一個事件通常由更新語句加上其他信息。線程讀取到一個事件並正發送到
slave
上。
Finished
reading
one
binlog;
switching
to
next
binlog
讀取完了一個二進制日志,正切換到下一個。
Has
sent
all
binlog
to
slave;
waiting
for
binlog
to
be
updated
已經讀取完全部未完成更新日志,並且全部都發送到
slave
了。它處於空閒狀態,正等待在
master
上執行新的更新操作以在二進制日志中產生新
的事件,然後讀取它們。
Waiting
to
finalize
termination
當前線程停止了,這個時間很短。
6.3.2
Slave
的
I/O
線程狀態
以下列出了
slave
的
I/O
線程
State
字段中最常見的幾種狀態。從
MySQL
4.1.1
開始,這個狀態在執行
SHOW
SLAVE
STATUS
語句結果的
Slave_IO_State
字段也會出現。這意味著可以只執行
SHOW
SLAVE
STATUS
語句就能了解到更多的信息。
Connecting
to
master
該線程證嘗試連接到
master
上。
Checking
master
version
確定連接到
master
後出現的一個短暫的狀態。
Registering
slave
on
master
確定連接到
master
後出現的一個短暫的狀態。
Requesting
binlog
dump
確定連接到
master
後出現的一個短暫的狀態。該線程向
master
發送一個請求,告訴它要請求的二進制文件以及開始位置。
Waiting
to
reconnect
after
a
failed
binlog
dump
request
如果二進制日志轉儲
(binary
log
dump)
請求失敗了
(
由於連接斷開
)
,該線程在休眠時進入這個狀態,並定期重連。重連的時間間隔由
--
master-connect-retry
選項來指定。
Reconnecting
after
a
failed
binlog
dump