Mysql主從同步及其讀寫分離的實現過程

Mysql主從同步及其讀寫分離的實現過程
環境:CentOS release 5.2 、mysql-5.1.55.tar.gz、mysql-proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz
測試機:172.16.10.11:mysql proxy 及其mysql主數據庫
        172.16.10.12:mysql從數據庫
1.編譯安裝mysql:
a首先yum安裝mysql所需要的環境
#yum install  make  gcc gcc-c++  libxml2   libxml2-devel  libmcrypt   libmcrypt-devel   libtool-ltdl   apr   apr-*   ncurses  ncurses-*
b.安裝mysql
#/usr/sbin/groupadd mysql
#/usr/sbin/useradd mysql –g mysql
在執行./configure 之前,先執行:
# autoreconf –force –install
# libtoolize –automake –force
# automake –force –add-missing
#./configure –prefix=/opt/mysql –localstatedir=/opt/mysql/data/ –with-server-suffix=-enterprise-gpl –without-debug –with-big-tables –with-extra-charsets=all –with-pthread –enable-thread-safe-client –enable-static –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –enable-assembler –without-ndb-debug –with-plugins=innobase
#Make
#Make install
初始化
#scripts/mysql_install_db –-user=mysql (一定要添加)
改權限、主配置文件、環境變量
#chown -R mysql.mysql /opt/mysql/
# cp support-files/my-medium.cnf /etc/my.cnf
# chmod 750 /opt/mysql –R   //-R : 對目前目錄下的所有檔案與子目錄進行相同的權限變更
# chgrp mysql /opt/mysql -R
啟動mysql
#/opt/mysql/bin/mysqld_safe –user=mysql &
到此mysql服務器的安裝就結束瞭!
備:在兩臺服務器上均安裝mysql數據庫
2 mysql主從同步配置過程
在主服務器上:
#vi /etc/my.cnf
修改或添加以下條目
 Log-bin=master-bin     //修改
 Log-bin-index=master-bin.index //添加
 Server-id=1
重啟mysql數據庫
添加replication賬號
#/opt/mysql/bin/mysql –uroot –p
Mysql>grant replication slave on *.* to ‘slave’@’172.16.10.12’ identified by ‘123456’;
Mysql>flush privileges;
查看master當前的日志文件及日志位置:
mysql> show master status;
+——————-+———-+————–+——————+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————-+———-+————–+——————+
| master-bin.000001 |      106 |              |                  |
+——————-+———-+————–+——————+
在從的數據庫上:
#vi /etc/my.cnf
修改或添加以下條目
log-bin=mysql-bin
relay-log=relay-log-bin   //添加
relay-log-index=slave-relay-bin.index //添加
server-id=2
註:server-id不能與主服務器的相同
重啟mysql服務
#/opt/mysql/bin/mysql –uroot –p
Mysql>stop slave;
Mysql>change master to master_host=’172.16.10.11’,master_port=3306,master_user=’slave’,master_password=’123456’,master_log_file=’master-bin.000001’,master_log_pos=106;
Mysql>start slave
Mysql>show slave status\G
出現如下兩行
Slave_IO_Running: Yes         
Slave_SQL_Running: Yes
表示主從mysql服務器配置完成! 
如果出現no,就將從數據庫上述重新操作一遍"stop slave"。
Mysql proxy配置過程:
一、必備軟件:
1、LUA
   可以去LUA的官方下載:www.lua.org
2、MySQL Proxy
   這裡有好多二進制版本。
    http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
   或者去MYSQL官方下載源代碼。
三、安裝體驗
1、 LUA的安裝
[root@localhost ~]#tar zxvf lua-5.1.2.tar.gz -C /usr/local
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv lua-5.1 lua
[root@localhost lua]# cd lua
[root@localhost lua]#make local;make install;
    導出環境變量:
[root@localhostlua]#export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
2、MySQL Proxy 安裝 
[root@localhost ~]#tar -zxvf mysql-proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz -C /usr/local/mysql/
[root@localhost ~]#cd /usr/local/mysql
[root@localhost mysql]#mv mysql-proxy-0.6.1-linux-rhel4-x86-32bit/ mysql-proxy
[root@localhost sbin]# export PATH=$PATH:/usr/local/mysql/mysql-proxy/sbin/
四、使用MySQL Proxy
mysql proxy就是一個中間層代理,也可以說是一個連接池,負責將前臺應用的連接請求轉發給後臺的數據庫,並且通過使用lua腳本,可以實現復雜的連接控制和過濾,從而實現讀寫分離和負載均衡,對用戶來說,mysql proxy完全透明,應用則隻需連接到mysql proxy的監聽端口即可。
1、查看幫助選項
[root@localhost ~]#、啟動MySQL-Proxy(測試讀寫分離) mysql-proxy –help-all
3
[root@localhost ~]# cd /opt/mysql-proxy/bin
[root@localhost ~]#./mysql-proxy –admin-username=admin –admin-password=admin –proxy-read-only-backend-addresses=172.16.10.12:3306 –proxy-backend-addresses=127.0.0.1:3306 –proxy-lua-script=/usr/local/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua –admin-lua-script=/usr/local/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua –daemon –max-open-files=1500
備註:
–daemon 采用daemon方式啟動
–admin-address=:4401 指定mysql proxy的管理端口,在這裡,表示本機的4401端口
–proxy-address=:4040 指定mysql proxy的監聽端口,也可以用 127.0.0.1:4040表示
–proxy-backend-addresses=127.0.0.1:3306 指定mysql主機的端口
–proxy-read-only-backend-addresses=172.16.10.12:3306 指定另一個隻讀的mysql主機端口
–proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua 指定lua腳本,在這裡,使用的是rw-splitting腳本,用於讀寫分離
問題:網站在使用mysql proxy連接數據庫時網站出現亂碼 (不使用時正常)
網友分析:連接上mysql proxy後,執行查詢時,隨即出現亂碼,出現此問題的原因是當我們使用mysql proxy讀寫分離時,通常會有多個後端服務器,客戶端發出查詢請求時,一般會先發出一條類似於“SET NAME utf8”的語句來聲明客戶端編碼,然後再發出實際查詢的SQL語句 ,但mysql proxy可能會把兩條語句分發給不同的後端數據庫,於是就出現瞭亂碼。
解決方法:
強制指定後端服務器的字符編碼:
[mysqld]
init-connect='SET NAME utf8'
default-character-set=utf8
skip-character-set-client-handshake
重啟mysql服務
然後用phpmyadmin測試,就可以正常使用瞭!(phpmyadmin使用的是utf8編碼)
 

 
作者“Just do it !”

發佈留言