久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL主從同步和讀寫分離如何配置

138次閱讀
沒有評論

共計 10879 個字符,預計需要花費 28 分鐘才能閱讀完成。

這篇文章主要為大家展示了“MySQL 主從同步和讀寫分離如何配置”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“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 ndash;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 test@192.168.0.2 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 root@192.168.0.2:/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; www.2cto.com

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 -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 步。

以上是“MySQL 主從同步和讀寫分離如何配置”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計10879字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 清丰县| 天等县| 大埔区| 乳山市| 通河县| 舒兰市| 衢州市| 宁乡县| 古丈县| 紫金县| 共和县| 彰化县| 额尔古纳市| 寻乌县| 青海省| 水城县| 县级市| 黑水县| 胶州市| 岐山县| 无为县| 安陆市| 当雄县| 五台县| 信阳市| 邢台县| 锦屏县| 赤壁市| 右玉县| 盘锦市| 石屏县| 宁德市| 邳州市| 玉门市| 临漳县| 洛隆县| 黄陵县| 当雄县| 夏河县| 高安市| 高陵县|