♥ ♥ ♥ 如果這頁訊息對您有幫助 請幫我點上方廣告↑ ↑ ↑ 感謝您的幫助 ♥ ♥ ♥
FILE* fp = fopen(path, "r"); if (fp) { // file exists fclose(fp); } else { // file doesn't exist }
♥ ♥ ♥ 如果這頁訊息對您有幫助 請幫我點上方廣告↑ ↑ ↑ 感謝您的幫助 ♥ ♥ ♥
FILE* fp = fopen(path, "r"); if (fp) { // file exists fclose(fp); } else { // file doesn't exist }
起因是不想要動到舊的程式碼 , 若用 mysql-proxy 把讀寫分離出來 , 那舊的程式連接資料庫的 connect 段就不用改了 , 而且 mysql-proxy 官網還寫了不少好處:
– load balancing
– failover
– query analysis
– query filtering and modification
and many more.
首先要先建制一個 master/slave 的 mysql 架構 – 設定 mysql 成 master / slave 架構
在 gentoo 中 , 用 emerge –av mysql-proxy 把 目前版本 0.61 裝進來 , 然後 /etc/conf.d/mysql-proxy 的設定如下
# /etc/conf.d/mysql-proxy: config file for /etc/init.d/mysql-proxy # location auf pidfile PIDFILE="/var/run/mysql-proxy.pid" # general options for mysql-proxy OPTS="--proxy-lua-script=/root/tutorial-keepalive.lua --proxy-backend-addresses=172.30.0.182:3306 --proxy-read-only-backend-addresses=172.30.0.183:3306 " #OPTS="/root/mysql-proxy.lua" # if you want mysql-proxy to depend on mysql, enable this: #RC_NEED="mysql"
這邊的 tutorial-keepalive.lua 可以到 http://svn.mysql.com/svnpublic/mysql-proxy/trunk/examples/tutorial-keepalive.lua下載
參考 http://jan.kneschke.de/2007/8/1/mysql-proxy-learns-r-w-splitting
O’Reilly 有一些 lua 的 sample : http://www.oreillynet.com/pub/a/databases/2007/07/12/getting-started-with-mysql-proxy.html?page=4
MySQL 官網的 FAQ : http://dev.mysql.com/doc/refman/5.0/en/mysql-proxy-faq.html
http://dev.mysql.com/doc/refman/5.0/en/mysql-proxy.html
在 January 30th, 2009 , MySQL Proxy 有新版了 from 0.6.1 to 0.7.0
http://jan.kneschke.de/2009/1/30/mysql-proxy-from-0-6-1-to-0-7-0
另外 Lua 是一種簡單/快速的 script language , mysql proxy snippets
最後看到有個問題 : “SPoF” , Sigle Point of Failure ….
準備兩台 mysql server , 用 vmware ESX server , clone 了兩台出來 , 也順便把 dbs 的 aggregator 弄了一套在上面
[mysqld] log-bin=mysql-bin server-id=1
cd /var/lib/mysql
tar cf – db_item/ | ssh [email protected] ‘cd /var/lib/mysql/ ; tar xf –’
( 172.30.0.183 是此例的 slave )
unlock tables;
change master to master_host=’172.30.0.182′ , master_user=’repl’ , master_password=’xxxxx’ , master_log_file=’mysql-bin.000005′, master_log_pos=791;
執行程式時, 若遇到
./update_item: error while loading shared libraries: libsqlrclientwrapper-0.40.so.1: cannot open shared object file: No such file or directory
像這樣的錯誤訊息 , 表示程式中所需的 so 檔(share library) 沒找到 , 要修改 /etc/ld.so.conf 加上這個目錄 , 改完要下 ldconfig –v 讓路徑生效
可以用 ldd 看該程式所使用到的 shared library 有那些, 及 lib 路徑
—–
以下是 gentoo 的標準解法 , 其他版本的 linux 則不太相同!!
cat /etc/ld.so.conf 這個檔是由 env-update 產生的 , 所以再繼續看一下 /etc/env.d 下 , 究竟有啥
# ld.so.conf autogenerated by env-update; make all changes to # contents of /etc/env.d directory /usr/local/lib /usr/i686-pc-linux-gnu/lib /usr/lib/gcc/i686-pc-linux-gnu/4.1.2 /usr/lib/gcc/i686-pc-linux-gnu/4.1.1 /usr/local/firstworks/lib
參考資料, 這是 compile sqlrelay 列出來的 information
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
———————————————————————-
/bin/sh ../../libtool –mode=finish /usr/local/firstworks/lib
PATH=”$PATH:/sbin” ldconfig -n /usr/local/firstworks/lib
———————————————————————-
Libraries have been installed in:
/usr/local/firstworks/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR’
flag during linking and do at least one of the following:
– add LIBDIR to the `LD_LIBRARY_PATH’ environment variable
during execution
– add LIBDIR to the `LD_RUN_PATH’ environment variable
during linking
– use the `-Wl,–rpath -Wl,LIBDIR’ linker flag
– have your system administrator add LIBDIR to `/etc/ld.so.conf’
在 /etc/env.d 下建立一個 90sqlrelay
內容是
LDPATH="/usr/local/firstworks/lib"
再run : env-update , 就看到 /etc/ld.so.conf 多了正確的 lib path 了
// ———————–
[12/6/13 下午4:37:54] RUTEN AA: 到 /usr/lib 找出原生的 .so 檔,應該會是 libsqlrclientwrapper-0.40.so.xxx.xxx
[12/6/13 下午4:38:13] RUTEN AA: ln -s libsqlrclientwrapper-0.40.so.xxx.xxx 到 loss 的 libsqlrclientwrapper-0.40.so.1.0.0
[12/6/13 下午4:38:17] RUTEN AA: 再 ldconfig
[12/6/13 下午4:40:53] RUTEN AA: 可以用 ldconfig -p 看是不是已經把 libsqlrclientwrapper-0.40.so.1 給 load 進來了
2017-0920 update:
stable version = rudiments-0.32 + sqlrelay-0.39.4
./sqlrelay-0.39.4/src/api/php/.libs/libsql_relay.so.0.0.0
step1. 裝 sqlrelay 前要先裝 Rudiments 的 library , 現在抓 rudiments 0.32 版.
PATH="$PATH:/sbin" ldconfig -n /usr/local/firstworks/lib
Libraries have been installed in:
/usr/local/firstworks/lib
他有提到幾點
– add LIBDIR to the `LD_LIBRARY_PATH’ environment variable
during execution
– add LIBDIR to the `LD_RUN_PATH’ environment variable
during linking
– use the `-Wl,–rpath -Wl,LIBDIR’ linker flag
– have your system administrator add LIBDIR to `/etc/ld.so.conf’
—->解決 lib 問題 : ld.so.conf
step2. 裝 sqlrelay , 抓
用 php code 測試 sqlrelay extension 是否 load 進來了
$a = get_loaded_extensions();
print_r( $a );
http://sqlrelay.sourceforge.net/sqlrelay/tuning.html
這邊提到一些改善 SQL Relay 效能的方法, 不過這些方法也適用於一些 networked daemon 的 tunning
如 下 sysctl -a|grep timeout 看到
net.ipv4.tcp_fin_timeout = 60 設成 30 ,
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
tcp_tw_recycle , tcp_tw_reuse 這兩個 default 是 0 (關起來的) 設成 1 ,
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
——–
cat /etc/sysctl.conf
net.ipv4.ip_local_port_range = “1024 65535” —> 這個在 gentoo 好像無效
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
用 gentoo 的 stage3-x86-2008.0.tar.bz2
建一個 /chroot 目錄 , 把 stage3-x86-2008.0.tar.bz2 解到這目錄 , 要 copy 這幾個 file 到 /chroot 下對應的目錄, /etc/resolv.conf /etc/fstab
下 chroot /chroot /bin/bash 就進入到 gentoo 預建好的 tree 中了 ,
要 env-update ; source /etc/profile
另外可以把 /chroot/etc/passwd 那邊有關帳號的修改一下, 譬如取消 root 帳號