? ? ? ? ? ? ?對(duì)于新手混蔼,不要馬上就下刀到服務(wù)器配置mysql數(shù)據(jù)庫(kù)主從復(fù)制,同步等等泪电!首先握牧,要了解mysql主從的原理,不然粱快,你從網(wǎng)上cp人家的例子秩彤,錯(cuò)了,都不知哪里出問(wèn)題事哭!這是我對(duì)沒(méi)接觸過(guò)mysql簡(jiǎn)單主從而在工作中就馬上要用到mysql主從的同學(xué)的忠告漫雷!
mysql簡(jiǎn)單主從有好幾種實(shí)施方案,如:什么同步鳍咱,異步降盹,什么半同步等等!
今天我們都不說(shuō)這些谤辜!我們就說(shuō)下簡(jiǎn)單原理蓄坏,和簡(jiǎn)單實(shí)操!
注意事項(xiàng):
(1)主從數(shù)據(jù)庫(kù)在同步前丑念,主從兩個(gè)數(shù)據(jù)庫(kù)必須完善相等(一模一樣)
(2)服務(wù)器的mysql版本必須相同或從服務(wù)器的稍微高些
別的注意事項(xiàng)這里不說(shuō)涡戳,想了解更多的可以自己去了解或問(wèn)下我也行!
第一步:說(shuō)說(shuō)mysql簡(jiǎn)單主從原理
mysql主從復(fù)制原理
從庫(kù)生成兩個(gè)線程脯倚,一個(gè)I/O線程渔彰,一個(gè)SQL線程;
i/o線程去請(qǐng)求主庫(kù) 的binlog挠将,并將得到的binlog日志寫(xiě)到relay log(中繼日志) 文件中胳岂;
主庫(kù)會(huì)生成一個(gè) log dump 線程,用來(lái)給從庫(kù) i/o線程傳binlog舔稀;
SQL 線程乳丰,會(huì)讀取relay log文件中的日志,并解析成具體操作内贮,來(lái)實(shí)現(xiàn)主從的操作一致产园,而最終數(shù)據(jù)一致;
簡(jiǎn)單說(shuō):兩個(gè)人夜郁,只有一個(gè)去學(xué)校讀書(shū)什燕,一個(gè)待在家里,去讀書(shū)的那個(gè)把看到的竞端,聽(tīng)到的屎即,抄到的都寫(xiě)在練習(xí)本上,binlog就是這個(gè)練習(xí)本,在家那個(gè)呢就拿著練習(xí)本學(xué)習(xí)技俐,因?yàn)檫B個(gè)人都是在練習(xí)本上面學(xué)東西乘陪,所以一樣!道理就這樣雕擂!因?yàn)閙ysql的操作都會(huì)記錄在binlog里面啡邑,這個(gè)binlog是需要配置一下的!
第二步:配置mysql的主從配置
CentOS6.5 MySQL主從同步井赌,MySQL版本5.6.21
主服務(wù)器:centos6.5 IP:192.168.1.101
從服務(wù)器:centos6.5 IP:192.168.1.102
一谤逼、主服務(wù)器相關(guān)配置
1、創(chuàng)建同步賬戶并指定服務(wù)器地址
[root@localhost ~]mysql -uroot -p
mysql>use mysql
mysql>grant replication slave on *.* to 'testuser'@'192.168.1.102' identified by '12345678';
mysql>flush privileges #刷新權(quán)限
授權(quán)用戶testuser只能從192.168.1.102這個(gè)地址訪問(wèn)主服務(wù)器192.168.1.101的數(shù)據(jù)庫(kù)仇穗,并且只具有數(shù)據(jù)庫(kù)備份的權(quán)限
2流部、修改/etc/my.cnf配置文件vi /etc/my.cnf
[mysqld]下添加以下參數(shù),若文件中已經(jīng)存在仪缸,則不用添加
server-id=1
log-bin=mysql-bin? #啟動(dòng)MySQL二進(jìn)制日志系統(tǒng)贵涵,
binlog-do-db=ourneeddb? #需要同步的數(shù)據(jù)庫(kù)
binlog-ignore-db=mysql? #不同步mysql系統(tǒng)數(shù)據(jù)庫(kù)列肢,若還有其它不想同步的恰画,繼續(xù)添加
[root@localhost ~]/etc/init.d/mysqld restart #重啟服務(wù)
3、查看主服務(wù)器master狀態(tài)(注意File與Position項(xiàng)瓷马,從服務(wù)器需要這兩項(xiàng)參數(shù))
mysql> show master status;
+------------------+----------+--------------+------------------+
| File? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000012 |? ? ? 120 | ourneeddb| mysql? ? ? ? ? ? |
+------------------+----------+--------------+------------------+
4拴还、導(dǎo)出數(shù)據(jù)庫(kù)
導(dǎo)出數(shù)據(jù)庫(kù)之前先鎖定數(shù)據(jù)庫(kù)
flush tables with read lock;? ? #數(shù)據(jù)庫(kù)只讀鎖定命令,防止導(dǎo)出數(shù)據(jù)庫(kù)的時(shí)候有數(shù)據(jù)寫(xiě)入
unlock tables; #解除鎖定
導(dǎo)出數(shù)據(jù)庫(kù)結(jié)構(gòu)及數(shù)據(jù):mysqldump -uroot -p ourneeddb > /home/ourneeddb.sql
導(dǎo)出存儲(chǔ)過(guò)程及函數(shù)∨菲浮:mysqldump -uroot -p -ntd -R ourneeddb > ourneeddb_func.sql
tips:-ntd導(dǎo)出存儲(chǔ)過(guò)程片林、-R導(dǎo)出函數(shù)
二、從服務(wù)器相關(guān)配置
1怀骤、修改/etc/my.cnf配置文件vi /etc/my.cnf
[mysqld]下添加以下參數(shù)费封,若文件中已經(jīng)存在,則不用添加
server-id=2? #設(shè)置從服務(wù)器id蒋伦,必須于主服務(wù)器不同
log-bin=mysql-bin? #啟動(dòng)MySQ二進(jìn)制日志系統(tǒng)
replicate-do-db=ourneeddb? #需要同步的數(shù)據(jù)庫(kù)名
replicate-ignore-db=mysql? #不同步mysql系統(tǒng)數(shù)據(jù)庫(kù)
[root@localhost~ ]/etc/init.d/mysqld restart #重啟服務(wù)
2弓摘、導(dǎo)入數(shù)據(jù)庫(kù)
導(dǎo)入過(guò)程這里不做闡述
3、配置主從同步
[root@localhost~ ]mysql -uroot -p
mysql>use mysql
mysql>stop slave;
mysql>change master to
master_host='192.168.1.101',
master_user='testuser',
master_password='12345678',
master_log_file='mysql-bin.000012',
master_log_pos=120;? #log_file與log_pos是主服務(wù)器master狀態(tài)下的File與Position
mysql>start slave;
mysql>show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.101
Master_User: testuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000012
Read_Master_Log_Pos: 120
Relay_Log_File: orange-2-relay-bin.000003
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000012
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: orange
Replicate_Ignore_DB: mysql,test,information_schema,performance_schema
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: 120
Relay_Log_Space: 1320
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:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 773d2987-6821-11e6-b9e0-00163f0004f9
Master_Info_File: /home/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
注意查看Slave_IO_Running: Yes? Slave_SQL_Running: Yes這兩項(xiàng)必須為Yes 以及Log_File痕届、Log_Pos要于master狀態(tài)下的File,Position相同
如果都是正確的韧献,則說(shuō)明配置成功!
上面的操作研叫,網(wǎng)上有不少锤窑!特別的那幾個(gè)主從配置參數(shù),不懂的話嚷炉,要百度下幾個(gè)參數(shù)都有什么作用渊啰!這樣學(xué)習(xí)起來(lái)就更明白了!