一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL主從同步、讀寫分離配置步驟

MySQL主從同步、讀寫分離配置步驟

2019-12-01 14:10MYSQL教程網 Mysql

根據要求配置MySQL主從備份、讀寫分離,結合網上的文檔,對搭建的步驟和出現的問題以及解決的過程做了如下筆記

現在使用的兩臺服務器已經安裝了MySQL,全是rpm包裝的,能正常使用。 
為了避免不必要的麻煩,主從服務器MySQL版本盡量保持一致; 
環境:192.168.0.1 (Master) 
192.168.0.2 (Slave) 
MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1 
1、登錄Master服務器,修改my.cnf,添加如下內容; 
server-id = 1 //數據庫ID號, 為1時表示為Master,其中master_id必須為1到232–1之間的一個正整數值; 
log-bin=mysql-bin //啟用二進制日志; 
binlog-do-db=data //需要同步的二進制數據庫名; 
binlog-ignore-db=mysql //不同步的二進制數據庫名;這個同步后聽說很麻煩,我沒有同步; 
log-bin=/var/log/mysql/updatelog //設定生成的log文件名; 
log-slave-updates //把更新的記錄寫到二進制文件中; 
slave-skip-errors //跳過錯誤,繼續執行復制; 
2、建立復制所要使用的用戶; 
mysql>grant replication slave on *.* to [email protected] identified by '********' 
3、重啟mysql; 
/usr/bin/mysqladmin -uroot shutdown; 
/usr/bin/mysql_safe & 
4、現在備份Master上的數據; 
鎖定后我直接tar.gz data這個庫文件; 
mysql>FLUSH TABLES WITH READ LOCK; 
cd /var/lib/mysql 
tar data.tar.gz data 
接著直接執行了遠程scp; 
scp ./data.tar.gz [email protected]:/var/lib/mysql 
5、登錄Slave數據庫服務器,修改my.cnf; 
server-id = 3 //2已經被用在另一個服務器上了,如果以后要再加Slave號接著往后數就OK了; 
log-bin=mysql-bin 
master-host = 192.168.0.1 
master-user = test 
master-password = ****** 
master-port = 3306 
master-connect-retry=60 //如果發現主服務器斷線,重新連接的時間差; 
replicate-ignore-db=mysql //不需要備份的數據庫; 
replicate-do-db=data //需要備份的數據庫 
log-slave-update 
slave-skip-errors 
6、解壓剛才從Master scp過來的文件,此處不用改權限、屬主,默認沒有改變,可以根據實際情況進行修改; 
7、上述完成后,可以啟動slave了;查看slave狀態; 
mysql>slave start; 
mysql>show slave status\G; 
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: 192.168.0.1 
Master_User: test 
Master_Port: 3306 
Connect_Retry: 60 
Master_Log_File: updatelog.000001 
Read_Master_Log_Pos: 106 
Relay_Log_File: onlinevc-relay-bin.000013 
Relay_Log_Pos: 1069 
Relay_Master_Log_File: updatelog.000001 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
Replicate_Do_DB: data 
Replicate_Ignore_DB: mysql 
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: 106 
Relay_Log_Space: 1681 
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.00 sec) 

ERROR: 
No query specified 

8、查看Master上面的狀態; 
mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| updatelog.000012 | 15016 | data | mysql | 
+------------------+----------+--------------+------------------+ 
1 row in set (0.00 sec) 
由此可見兩者的File、Position存在問題,所要要去Slave上設置對應主庫的Master_Log_File、Read_Master_Log_Pos;執行如下語句; 
mysql>slave stop; 
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='test', MASTER_PASSWORD='******',MASTER_LOG_FILE='updatelog.000012',MASTER_LOG_POS=15016; 
確保 Slave_IO_Running: Yes 、Slave_SQL_Running: Yes都要為YES才能證明Slave的I/O和SQL進行正常。 
9、解鎖主庫表; 
UNLOCK TABLES; 
到此主從MySQL服務器配置完成,測試結果如下; 
mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| updatelog.000012 | 717039 | data | mysql | 
+------------------+----------+--------------+------------------+ 
1 row in set (0.00 sec) 
mysql> show slave status\G; 
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: 192.168.0.1 
Master_User: test 
Master_Port: 3306 
Connect_Retry: 60 
Master_Log_File: updatelog.000012 
Read_Master_Log_Pos: 717039 
Relay_Log_File: onlinevc-relay-bin.000013 
Relay_Log_Pos: 1222 
Relay_Master_Log_File: updatelog.000012 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
Replicate_Do_DB: data 
Replicate_Ignore_DB: mysql 
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: 717039 
Relay_Log_Space: 1834 
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.00 sec) 

ERROR: 
No query specified 
#################################### 如下是MySQL數據庫讀寫分離操作步驟 ########################################## 
此處使用MySQL自己(Mysql-proxy)的代理實現數據庫的讀寫分離; 
所需要安裝包如下; 
1、check-0.9.8 
2、glib-2.18.4 
3、libevent-2.0.6-rc 
4、lua-5.1.4 
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz 
5、pkg-config-0.23 
6、mysql-5.0.56 
7、mysql-proxy-0.8.0 
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.0.tar.gz 

別的安裝包地址當時沒有記下載地址,不過大部分都在這個網站上找的;http://sourceforge.net/ 
&&&&&&&&&& 安裝開始 &&&&&&&& 
1、tar -zxvf check-0.8.4.tar.gz 
cd check-0.8.4 
./configure 
make 
make install 
2、tar -zxvf glib-2.18.4.tar.gz //系統rpm包可能版本低出現了問題3; 
./configure 
make 
make install 
3、tar -zxvf libevent-2.0.6-rc.tar.gz 
cd libevent-2.0.6-rc 
./configure --prefix=/usr/local/libevent 
make && make install 
4、tar -zxvf lua-5.1.4.tar.gz 
INSTALL_TOP= /usr/local/lua // 為了把lua安裝到/var/lib/lua下,故要修改其下的Makefile; 
或者直接執行:sed -i 's#INSTALL_TOP= /usr/local#INSTALL_TOP= /usr/local/lua#' Makefile 
root@testmysql [/software/lua-5.1.4]# make 
Please do 
make PLATFORM 
where PLATFORM is one of these: 
aix ansi bsd freebsd generic linux macosx mingw posix solaris 
See INSTALL for complete instructions. 
這處是要你選擇服務器所使用的平臺; 
執行:make linux //此處執行后出現了錯誤,解決辦法在下面問題解決區1處,此處先跳過; 
再執行:make install 
設置環境變量: 
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm" 
export CPPFLAGS="-I/usr/local/libevent/include" 
export CFLAGS="-I/usr/local/libevent/include" 

5、tar -zxvf pkg-config-0.23.tar.gz 
cd pkg-config-0.23 
./configure 
make 
make install 
安裝完之后要執行:cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc //原因見下面的問題解決區2處; 
6、安裝MySQL客戶端; 
因為此服務器系統是默認安裝了MySQL,沒有安裝客戶端,我又裝了client、devel如下所示已安裝的rpm包; 
root@testmysql [/software/lua-5.1.4]# rpm -qa | grep MySQL 
MySQL-client-5.1.48-0.glibc23 
MySQL-bench-5.0.91-0.glibc23 
MySQL-test-5.1.48-0.glibc23 
MySQL-shared-5.1.48-0.glibc23 
MySQL-server-5.1.48-0.glibc23 
MySQL-devel-5.1.48-0.glibc23 
此后的Mysql-proxy時總是一直報錯,編譯不過去,無奈之下用源碼包客戶端;(此時的rpm包都沒有卸載,直接執行了下面的安裝)//此處問題見問題解決區4處; 
tar zxvf mysql-5.0.56.tar.gz //此處我直接使用了mysql的5.0.56的源碼包; 
cd mysql-5.0.56 
./configure --prefix=/usr/local/mysql --without-server 
make && make install 

7、tar xvf mysql-proxy-0.8.0.tar.gz 
cd mysql-proxy-0.8.0 
./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua //問題解決處4有介紹; 
Make && Make install 

8、在/var/lib/bin創建mysql-proxy.sh,內容如下; 
#!/bin/bash 
LUA_PATH="/usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua" /usr/local/mysql-proxy/bin/mysql-proxy --proxy-backend-addresses=192.168.0.1:3306 --proxy-read-only-backend-addresses=192.168.0.2:3306 --proxy-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log & 
然后加上可執行權限; 
chmod a+x /var/lib/bin/mysql-proxy.sh 
執行:/var/lib/bin/mysql-proxy.sh 啟動服務; 
9、驗證是否開戶了:4040、4041; 
root@testmysql [/usr/local/bin]# netstat -an | grep 404* 
tcp 0 0 0.0.0.0:4040 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 
10、測試讀寫分離,此步略過,所有配置已經完成。 

&&&&&&&&&&&&&&&&&&&&&&&&&&& 問題解決區 &&&&&&&&&&&&&&&&&&&&&&&&&&&& 
1、在安裝的第四步執行make linux時報錯如下: 
root@testmysql [/software/lua-5.1.4]# make linux 
cd src && make linux 
make[1]: Entering directory `/software/lua-5.1.4/src' 
make all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses" 
make[2]: Entering directory `/software/lua-5.1.4/src' 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lapi.o lapi.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lcode.o lcode.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ldebug.o ldebug.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ldo.o ldo.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ldump.o ldump.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lfunc.o lfunc.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lgc.o lgc.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o llex.o llex.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lmem.o lmem.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lobject.o lobject.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lopcodes.o lopcodes.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lparser.o lparser.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lstate.o lstate.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lstring.o lstring.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ltable.o ltable.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ltm.o ltm.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lundump.o lundump.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lvm.o lvm.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lzio.o lzio.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lauxlib.o lauxlib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lbaselib.o lbaselib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ldblib.o ldblib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o liolib.o liolib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lmathlib.o lmathlib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o loslib.o loslib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o ltablib.o ltablib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lstrlib.o lstrlib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o loadlib.o loadlib.c 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o linit.o linit.c 
ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o 
ranlib liblua.a 
gcc -O2 -Wall -DLUA_USE_LINUX -c -o lua.o lua.c 
In file included from lua.h:16, 
from lua.c:15: 
luaconf.h:275:31: error: readline/readline.h: No such file or directory 
luaconf.h:276:30: error: readline/history.h: No such file or directory 
lua.c: In function 鈥榩ushline鈥? 
lua.c:182: warning: implicit declaration of function 鈥榬eadline鈥? 
lua.c:182: warning: assignment makes pointer from integer without a cast 
lua.c: In function 鈥榣oadline鈥? 
lua.c:210: warning: implicit declaration of function 鈥榓dd_history鈥? 
make[2]: *** [lua.o] Error 1 
make[2]: Leaving directory `/software/lua-5.1.4/src' 
make[1]: *** [linux] Error 2 
make[1]: Leaving directory `/software/lua-5.1.4/src' 
make: *** [linux] Error 2 

解決方法:yum install libtermcap-devel 
yum install ncurses-devel 
yum install libevent-devel 
yum install readline-devel 

2、安裝MySQL-proxy時報錯: 
checking for LUA... configure: error: Package requirements (lua5.1 >= 5.1) were not met: 

No package 'lua5.1' found 

Consider adjusting the PKG_CONFIG_PATH environment variable if you 
installed software in a non-standard prefix. 

Alternatively, you may set the environment variables LUA_CFLAGS 
and LUA_LIBS to avoid the need to call pkg-config. 
See the pkg-config man page for more details. 
解決辦法: 
cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc 

3、安裝MySQL-proxy時報錯: 
checking for GLIB... configure: error: Package requirements (glib-2.0 >= 2.16.0) were not met: 

No package 'glib-2.0' found 

Consider adjusting the PKG_CONFIG_PATH environment variable if you 
installed software in a non-standard prefix. 

Alternatively, you may set the environment variables GLIB_CFLAGS 
and GLIB_LIBS to avoid the need to call pkg-config. 
See the pkg-config man page for more details. 
解決辦法: 
1、查看系統已經安裝glib的rpm包; 
glibc-2.5-49.el5_5.4 
glibc-headers-2.5-49.el5_5.4 
glib2-2.12.3-4.el5_3.1 
glibc-common-2.5-49.el5_5.4 
glibc-devel-2.5-49.el5_5.4 
2、下載安裝glib-2.18.4.tar.gz 

4、剛開始使用系統里rpm所指定的mysq_config時,mysql-proxy安裝報錯,信息如下; 
configure: error: mysql_config not exists or not executable, use $ ./configure --with-mysql=/path/to/mysql_config 
看到幫助安裝文檔里要求如下: 
--with-mysql[=PATH] Include MySQL support. PATH is the path to 'mysql_config'。 
解決辦法就是:安裝包中的第6步。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性free非洲老妇| 韩国漂亮美女三级在线观看 | 无码骚夜夜精品 | 果冻传媒91 | 欧美成人中文字幕 | 亚洲国产自 | 亚洲入口| 免费一级欧美片在线观免看 | 古装床戏做爰无遮挡三级 | 人与动人物性行为zozo共患病 | 激情五月姐姐 | 亚洲精品国产精品麻豆99 | 午夜在线观看免费完整直播网页 | 国产一区二区三区在线观看视频 | 99er在线视频 | 好男人资源在线观看免费的 | 成人影院在线看 | 好吊妞乱淫| 动漫人物差差差动漫人物免费观看 | 猫咪免费人成网站在线观看入口 | 韩国美女vip内部2020 | 精品国产一区二区在线观看 | 国产一区二区三区在线观看视频 | 亚洲天天综合 | 国产 国语对白 露脸正在播放 | 欧美在线视频7777kkkk | 青苹果乐园影院免费观看完整版 | 亚欧毛片基地国产毛片基地 | 波多野结衣小说 | 无人在线视频高清免费观看动漫 | 欧美精品三区 | 久久久久久久尹人综合网亚洲 | 精品国产免费久久久久久婷婷 | 日岳母小说 | 欧美区一区| 美女视频黄a | 成年男女免费视频观看性 | 日本免费在线观看视频 | 天天干天天爽天天操 | 蛮荒的童话未删减在线观看 | 日韩在线第一区 |