MySQL主从复制与读写分离[修改]


作者:lixiuran 日期:2014年5月2日   备注【本人根据网上资源修改,参考http://www.cnblogs.com/luckcs/articles/2543607.html

测试环境:192.168.5.200 【主数据库服务器 master,centos 6.4】

           192.168.5.201 【从数据库服务器 slave,windows server 2003】

       192.168.5.202 【mysql代理服务器 proxy,centos 6.4】【用于读写分离,后讲】


这三台虚拟机要保证都能ping通,网络要配好,linux上iptables 3306端口要开放,对于主从mysql服务器可以都是windows,

代理服务器要求linux,并且都装好mysql。环境搭建好,看正文!

 

=====================MySQL主从复制==========================

1.在主服务器200上操作,启动mysql

 

登陆mysql 后给从服务器授权

mysql> GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.5.201' identified by 'rep1';

 

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 3028 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

 

记录下 FILE[mysql-bin.000005] 及 Position[3028 ] 的值,在后面进行从服务器操作的时候需要用到。

2.配置从服务器,就2部

    2.1 由于我的从服务器是windows,打开my.ini[ 如果是linux,则为my.cnf], server-id = 1修改为 server-id = 10,并确保这个ID没有被别的MySQL服务所使用。

    2.2 执行同步SQL语句

mysql> change master to
master_host='192.168.5.200',
master_user='rep1',
master_password='rep1',
master_log_file='mysql-bin.000005',
master_log_pos=3028 ;

    2.3 正确执行后启动Slave同步进程
mysql> start slave;

    2.4 主从同步检查
mysql> show slave status\G

 

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。已标红

下面将主数据服务器的数据手动同步到从服务器。

测试非常简单:在主数据库上 create database abcd;然后在从服务器上show databases; 看看有没有,

如果有,恭喜你,mysql主从复制你已配置好。

Notice:

       如果数据没有同步,你在slave上Slave_IO_Running 与 Slave_SQL_Running这俩状态是否为yes.

如果不是你就要从新链接一下了。在主上 show master status; 记录下那俩值,然后再从上

 

mysql> change master to
master_host='192.168.5.200',
master_user='rep1',
master_password='password',
master_log_file='mysql-bin.000005',
master_log_pos=8888

日志位置8888一定要对应上,不然你还是启动不了。

由此,整个MySQL主从复制的过程就完成了,接下来,我们进行MySQL读写分离的安装与配置。

 

==========Mysql-proxy安装配置【 mysql读写分离】====================

一、安装前准备 


1.mysql-proxy安装前所需依赖包 
libevent 1.x or higher (1.3b or later is preferred) lua 5.1.x or higher(使用5.2版本编译时会出现大量错误) glib2 2.6.0 or higher pkg-config 
libtool 1.5 or higher 
MySQL 5.0.x or higher developer files gettext 0.18.2 
2.获取依赖包及mysql-proxy: 
1.libevent-2.0.21:https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz 
2.lua-5.1.5:http://www.lua.org/ftp/lua-5.1.5.tar.gz 
3.glib-2.34.3:http://ftp.gnome.org/pub/gnome/sources/glib/2.34/glib-2.34.3.tar.xz 
4.gettext-0.18.2:http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.2.tar.gz

5.mysql-5.6:http://dev.mysql.com/downloads/mysql/ 

6.mysql-proxy-0.8.3:http://dev.mysql.com/downloads/mysql-proxy/ 

3.安装前配置环境 


二、安装部署依赖包 

操作系统:centOS6.4 x86_64 2.

执行yum install zlib* libffi* gcc gcc-c++ make autoconf automake libtool pkgconfig lrzsz xz ncurses* readline cmake   

1.安装libevent 
#tar -zxvf libevent-2.0.21-stable.tar.gz  #cd libevent-2.0.21-stable #./configure  #make 
#make install  
2.安装lua 
#tar -zxvf lua-5.1.5.tar.gz #cd lua-5.1.5 
#vi src/Makefile(64位系统必须修改) CFLAGS= -O2 -Wall $(MYCFLAGS) 添加-fPIC 
CFLAGS= -fPIC -O2 -Wall $(MYCFLAGS) #make linux 
#make install INSTALL_TOP=/usr/local/lua #cp etc/lua.pc /usr/local/lib/pkgconfig/ 3.安装glib 
安装前检查是否有命令:msgfmt 

3.安装gettext 

#tar -zxvf gettext-0.18.2.tar.gz #cd gettext-0.18.2 
#./configure --prefix=/usr/local/gettext #make && make install 
#ln -s /usr/local/gettext/bin/* /usr/local/bin/  
4.安装glib 
#tar -Jxvf glib-2.34.3.tar.xz

#cd glib-2.34.3 

#./configure --prefix=/usr/local/glib 

#make 
#make install 
5.安装mysql(也可使用开发者库替代) 
#groupadd -g 101 mysql 
#useradd -u 501 -s /sbin/nologin -g mysql mysql 

#mkdir -p /home/db_mysql/data 
#chown -R mysql.mysql /home/db_mysql/data #tar -zxvf mysql-5.6.11.tar.gz 

#cd mysql-5.6.11 

#cmake \ 
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 
-DMYSQL_UNIX_ADDR=/home/db_mysql/data/mysql.sock \ -DMYSQL_DATADIR=/home/db_mysql/data \ -DDEFAULT_CHARSET=utf8 \ 
-DDEFAULT_COLLATION=utf8_general_ci \ -DENABLED_LOCAL_INFILE=on \ 
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 

#make && make install    


三、安装mysql-proxy 
#export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 

#export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/glib/lib/pkgconfig 

#export LUA_CFLAGS="-I/usr/local/lua/include" 

#export LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" #export LDFLAGS="-L/usr/local/lib -lm" 

#export CFLAGS="-I/usr/local/lib" #tar -zxvf mysql-proxy-0.8.3.tar.gz #cd mysql-proxy 

 

#./configure --prefix=/usr/local/mysql-proxy --with-lua=/usr/local/lua --with-mysql=/usr/local/mysql

#make 
#make install 
#mkdir /usr/local/mysql-proxy/conf 
#cp ./lib/*.lua /usr/local/mysql-proxy/conf  
测试启动 
#./mysql-proxy --proxy-backend-addresses=192.168.5.200:3306 --proxy-read-only-backend-addresses=192.168.5.201:3306
--proxy-lua-script=/usr/local/mysql-proxy/conf/rw-splitting.lua 

 

提示 
2013-07-03 02:39:58: (critical) plugin proxy 0.8.3 started 启动成功   
在客户端使用mysql -h 192.168.157.135 -P 4040(mysql-proxy的IP及监听端口号) 若能登陆mysql则代理成功 

===================华丽分割线===================

如何测试呢:

  当你登陆到代理服务器上后,关闭主从复制功能[在从服务器上stop slave;],写入一条数据,如果只在master上有,slave 没有就对了。因为写数据只向master里写。

然后打开从服务器的主从复制功能[start slave;]; 然后在代理服务器上写任何一条数据,看看是否两个数据库都有了,都有就对了。

 

 

posted @ 2014-05-02 08:49  风与叶子  阅读(280)  评论(0编辑  收藏  举报