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
二、MySQL Proxy
   這裏有好多二進制版本。
    http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
   或者去MYSQL官方下載源代碼。
3、安裝體驗
一、 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"
二、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/
4、使用MySQL Proxy
mysql proxy就是一箇中間層代理,也能夠說是一個鏈接池,負責將前臺應用的鏈接請求轉發給後臺的數據庫,而且經過使用lua腳本,能夠實現複雜的鏈接控制和過濾,從而實現讀寫分離和負載均衡,對用戶來講,mysql proxy徹底透明,應用則只需鏈接到mysql proxy的監聽端口便可。
一、查看幫助選項
[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編碼)
 

相關文章
相關標籤/搜索