Mysql5624 的主从复制及用atlas实现读写分离Word格式.docx
《Mysql5624 的主从复制及用atlas实现读写分离Word格式.docx》由会员分享,可在线阅读,更多相关《Mysql5624 的主从复制及用atlas实现读写分离Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
[root@localhost~]#mysql-uroot–p123456登录mysql
mysql>
grantreplicationslaveon*.*to'
repl'
@'
192.168.1.181'
identifiedby'
123'
;
创建repl用户,并授权给192.168.1.181使用。
3)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
showmasterstatus;
在从服务器上操作:
1)、确保/etc/f中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。
修改之后如下所示:
server-id=10服务器ID
2)、重启mysql服务。
3)、登录mysql,执行如下语句
[root@localhost~]#mysql-uroot–p123456
changemastertomaster_host='
192.168.1.180'
master_user='
master_password='
master_log_file='
mysql-bin.000001'
master_log_pos=330;
4)、启动slave同步。
startslave;
5)、检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。
showslavestatus\G
验证配置是否正常,mysql主从能否正常复制。
在主数据库上新建一个库,并且在库中写一个表和一些数据。
createdatabasemysqltest;
usemysqltest;
createtableuser(idint(5),namechar(10));
insertintouservalues(00001,'
zhangsan'
);
在从数据库中验证一下,是否正常复制到数据。
showdatabases;
select*frommysqltest.user;
从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。
环境如下:
单台数据库存有数据,要升级为主从复制的架构。
主数据库:
mysql-master:
IP192.168.1.180,数据库正常提供服务,有数据。
从数据库:
mysql-slave:
IP192.168.1.181,数据库正常提供服务,无数据。
升级大致步骤如下:
1、修改主数据库配置文件,开启主从复制必要的功能。
2、在主数据库中创建一个账号并授权给从数据库使用。
3、导出主数据库中的数据。
4、修改从数据库配置文件,开启主从复制必要的功能。
5、把刚才主数据库中导出的数据导入到从数据库。
6、在从数据库中配置连接主数据库要用到的账户、密码等。
7、启动主从复制功能,并检查是否正常复制。
开始升级:
在主数据库上操作:
3)、查看已有的数据库有哪些;
4)、进行锁表操作,不让数据进行写入动作,这么做是为了防止从数据库的原始数据和主数据库的原始数据不一致。
flushtableswithreadlock;
5)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
6)、切换一个终端,使用mysqldump命令将刚才查询到的两个库导出来。
mysqldump–uroot–p123456mysqltest&
gt;
mysqltest.sql
mysqldump–uroot–p123456test1234&
test1234.sql
7)、将导出来的库文件传送到从数据库的/root目录下。
[root@localhost~]#scpmysqltest.sqltest1234.sqlroot@192.168.1.181:
/root/
这中间需要输入一次验证口令。
见下图
8)、切换回之前的终端,进行表解锁操作。
unlocktables;
主数据库服务器上的操作告一段落。
在从数据库上操作:
3)、登录数据库,确认要同步的库名是否存在。
4)、创建名为mysqltest和test1234的库。
createdatabasetest1234;
5)、切换一个终端,将传过来的两个数据文件分别导入对应的数据库下。
[root@localhost~]#mysql-uroot–p123456mysqltest<
[root@localhost~]#mysql-uroot–p123456test1234&
lt;
6)、切换回之前的终端,执行如下语句
mysql-bin.000003'
master_log_pos=1650;
7)、启动主从复制功能。
8)、
检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。
验证主从是否正常配置:
在主数据库上插入数据:
showtables;
select*fromuser;
insertintouservalues(4,'
ergou'
insertintouservalues(5,'
sanwazi'
在从数据库上查看是否正常同步:
上图可以看出,主从之间已经可以正常复制了。
Atlas安装和配置:
Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。
它在MySQL官方推出的MySQL-Proxy0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。
目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。
主要功能:
*读写分离
*从库负载均衡
*IP过滤
*SQL语句黑白名单
*自动分表
一、环境
OS:
CentOS-6.5x86_64
AtlasIP:
192.168.1.182
MySQLMasterIP:
192.168.1.180
MySQLSlaveIP:
192.168.1.181
二、MySQL授权
MySQL主从已经配置好之后,主从对Atlas进行授权
grantallon*.*toatlas@'
192.168.1.182'
123456'
3、Atlas安装
#rpm-ivhAtlas-2.2.1.el6.x86_64.rpm
Atlas安装后的文件路径
/usr/local/mysql-proxy/
4、Atlas配置
加密MySQL用户密码,获取的加密串填写到配置文件的pwds参数中。
#/usr/local/mysql-proxy/bin/encrypt123456
/iZxz+0GRoA=
vim/usr/local/mysql_proxy/conf/test.conf
[mysql-proxy]
#带#号的为非必需的配置项目
#管理接口的用户名
admin-username=user
#管理接口的密码
admin-password=pwd
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses=192.168.1.180:
3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses=192.168.1.181:
3306@1
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds=atlas:
#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon=true
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有mo
nitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive=true
#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads=8
#日志级别,分为message、warning、critical、error、debug五个级别
log-level=message
#日志存放的路径
log-path=/usr/local/mysql-proxy/log
#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
#sql-log=OFF
#慢日志输出设置。
当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:
ms)的日志记录。
不设置该参数则输出全部日志。
#sql-log-slow=10
#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance=test
#Atlas监听的工作接口IP和端口
proxy-address=0.0.0.0:
1234
#Atlas监听的管理接口IP和端口
admin-address=0.0.0.0:
2345
#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables=person.mt.id.3
#默认字符集,设置该项后客户端不再需要执行SETNAMES语句
#charset=utf8
#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips=127.0.0.1,192.168.1
#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips=192.168.1.1
启动
/usr/local/mysql-proxy/bin/mysql-proxydteststart
关闭
/usr/local/mysql-proxy/bin/mysql-proxydteststop
五、Atlas参数备注
instance参数
同一台机器上的多个Atlas实例,使用不同的端口,对应不同数据库,使用各自的配置文件
默认的黑白名单
不带where的delete会屏蔽,"
sleep"
会屏蔽
备注:
1.03版本已经支持set
autocommit语句,另外对于python来说需要在连接上后执行一句conn.autocommit(True)
pwds参数
配置MySQL用户名和对应的加密过的MySQL密码,密码使用/usr/local/mysql-proxy/bin/encrypt程序进行加
密,用户名和密码用冒号分开,可以使用多个用户,用逗号空格分隔。
client-ips参数
在引入中间层后,因为连接DB的是Atlas,所以DB改为对部署Atlas的机器的IP作访问授权,而client-ips参
数用来控制连接Atlas的客户端的IP
lvs-ips参数
比如LVS后面挂接两台Atlas,分别叫A和B,LVS去循环检测A和B的存活,当Atlas检测到是LVS的IP来请求时
,根据在线或不在线状态,向LVS的检测脚本返回不同的值,这里是设置Atlas前面的LVS的物理网卡的IP。
六、Atlas管理接口使用
#mysql-u管理用户-p管理密码-h127.0.0.1-P管理端口
#mysql-uuser-ppwd-h127.0.0.1-P2345
查看管理语句参数:
select*fromhelp;
查看DB状态:
select*frombackends;
备注:
connected_clients这个参数有bug,不能正常显示。
七、Atlas常见问题
1、Atlas多实例启动问题:
如果配置文件中instance=instance,启动参数如下:
/usr/local/mysql-proxy/bin/mysql-proxydinstancestart
如果配置文件中instance=test,启动参数如下:
可以使用mysql-proxy命令启动,
/usr/local/mysql-proxy/bin/mysql-proxy--defaults-file=/usr/local/mysql-proxy/conf/f