Mysql5624地主从复制及用atlas实现读写分离.docx
- 文档编号:8124440
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:15
- 大小:456.47KB
Mysql5624地主从复制及用atlas实现读写分离.docx
《Mysql5624地主从复制及用atlas实现读写分离.docx》由会员分享,可在线阅读,更多相关《Mysql5624地主从复制及用atlas实现读写分离.docx(15页珍藏版)》请在冰豆网上搜索。
Mysql5624地主从复制及用atlas实现读写分离
Mysql5.6.24的主从复制及用atlas实现读写分离
在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的。
譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止。
使用mysql主从复制的好处有:
1、采用主从服务器这种架构,稳定性得以提升。
如果主服务器发生故障,我们可以使用从服务器来提供服务。
2、在主从服务器上分开处理用户的请求,可以提升数据处理效率。
3、将主服务器上的数据复制到从服务器上,保护数据免受意外的损失。
环境描述:
新企业要搭建架构为主从复制的mysql数据库。
主服务器(mysql-master):
IP地址:
192.168.1.180,mysql已安装,没有用户数据。
从服务器(mysql-slave):
IP地址:
192.168.1.181,mysql已安装,没有用户数据。
主从服务器均可正常提供服务。
主从复制配置如下:
在主服务器上操作:
1)、确保/etc/f中有如下参数,没有的话需手工添加,并重启mysql服务。
[mysqld]
log-bin=/usr/local/mysql/data/mysql/mysql-bin启动二进制文件
server-id=1服务器ID
2)、登录mysql,在mysql中添加一个repl的账号,并授权给从服务器。
[root@localhost~]#mysql-uroot–p123456登录mysql
mysql>grantreplicationslaveon*.*to'repl'@'192.168.1.181'identifiedby'123';创建repl用户,并授权给192.168.1.181使用。
3)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
mysql>showmasterstatus;
在从服务器上操作:
1)、确保/etc/f中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。
修改之后如下所示:
[mysqld]
log-bin=/usr/local/mysql/data/mysql/mysql-bin启动二进制文件
server-id=10服务器ID
2)、重启mysql服务。
3)、登录mysql,执行如下语句
[root@localhost~]#mysql-uroot–p123456
mysql>changemastertomaster_host='192.168.1.180',master_user='repl',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=330;
4)、启动slave同步。
mysql>startslave;
5)、检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。
mysql>showslavestatus\G
验证配置是否正常,mysql主从能否正常复制。
在主数据库上新建一个库,并且在库中写一个表和一些数据。
[root@localhost~]#mysql-uroot–p123456
mysql>createdatabasemysqltest;
mysql>usemysqltest;
mysql>createtableuser(idint(5),namechar(10));
mysql>insertintouservalues(00001,'zhangsan');
在从数据库中验证一下,是否正常复制到数据。
[root@localhost~]#mysql-uroot–p123456
mysql>showdatabases;
mysql>select*frommysqltest.user;
从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。
环境如下:
单台数据库存有数据,要升级为主从复制的架构。
主数据库:
mysql-master:
IP192.168.1.180,数据库正常提供服务,有数据。
从数据库:
mysql-slave:
IP192.168.1.181,数据库正常提供服务,无数据。
升级大致步骤如下:
1、修改主数据库配置文件,开启主从复制必要的功能。
2、在主数据库中创建一个账号并授权给从数据库使用。
3、导出主数据库中的数据。
4、修改从数据库配置文件,开启主从复制必要的功能。
5、把刚才主数据库中导出的数据导入到从数据库。
6、在从数据库中配置连接主数据库要用到的账户、密码等。
7、启动主从复制功能,并检查是否正常复制。
开始升级:
在主数据库上操作:
1)、确保/etc/f中有如下参数,没有的话需手工添加,并重启mysql服务。
[mysqld]
log-bin=/usr/local/mysql/data/mysql/mysql-bin启动二进制文件
server-id=1服务器ID
2)、登录mysql,在mysql中添加一个repl的账号,并授权给从服务器。
[root@localhost~]#mysql-uroot–p123456登录mysql
mysql>grantreplicationslaveon*.*to'repl'@'192.168.1.181'identifiedby'123';创建repl用户,并授权给192.168.1.181使用。
3)、查看已有的数据库有哪些;
mysql>showdatabases;
4)、进行锁表操作,不让数据进行写入动作,这么做是为了防止从数据库的原始数据和主数据库的原始数据不一致。
mysql>flushtableswithreadlock;
5)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
mysql>showmasterstatus;
6)、切换一个终端,使用mysqldump命令将刚才查询到的两个库导出来。
mysql>mysqldump–uroot–p123456mysqltest>mysqltest.sql
mysql>mysqldump–uroot–p123456test1234>test1234.sql
7)、将导出来的库文件传送到从数据库的/root目录下。
[root@localhost~]#scpmysqltest.sqltest1234.sqlroot@192.168.1.181:
/root/
这中间需要输入一次验证口令。
见下图
8)、切换回之前的终端,进行表解锁操作。
mysql>unlocktables;
主数据库服务器上的操作告一段落。
在从数据库上操作:
1)、确保/etc/f中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。
修改之后如下所示:
[mysqld]
log-bin=/usr/local/mysql/data/mysql/mysql-bin启动二进制文件
server-id=10服务器ID
2)、重启mysql服务。
3)、登录数据库,确认要同步的库名是否存在。
[root@localhost~]#mysql-uroot–p123456
mysql>showdatabases;
4)、创建名为mysqltest和test1234的库。
mysql>createdatabasemysqltest;
mysql>createdatabasetest1234;
5)、切换一个终端,将传过来的两个数据文件分别导入对应的数据库下。
[root@localhost~]#mysql-uroot–p123456mysqltest [root@localhost~]#mysql-uroot–p123456test1234<test1234.sql 6)、切换回之前的终端,执行如下语句 mysql>changemastertomaster_host='192.168.1.180',master_user='repl',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=1650; 7)、启动主从复制功能。 mysql>startslave; 8)、 检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常。 mysql>showslavestatus\G 验证主从是否正常配置: 在主数据库上插入数据: mysql>showdatabases; mysql>showtables; mysql>usemysqltest; mysql>select*fromuser; mysql>insertintouservalues(4,'ergou'); mysql>insertintouservalues(5,'sanwazi'); 在从数据库上查看是否正常同步: mysql>showdatabases; mysql>usemysqltest; mysql>select*fromuser; 上图可以看出,主从之间已经可以正常复制了。 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进行授权 mysql>grantallon*.*toatlas@'192.168.1.182'identifiedby'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: /iZxz+0GRoA= #设置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 查看管理语句参数: mysql>select*fromhelp; 查看DB状态: mysql>select*frombackends; 备注: connected_clients这个参数有bug,不能正常显示。 七、Atlas常见问题 1、Atlas多实例启动问题: 如果配置文件中instance=instance,启动参数如下: /usr/local/mysql-proxy/bin/mysql-proxydinstancestart 如果配置文件中instance=test,启动参数如下: /usr/local/mysql-proxy/bin/mysql-proxydteststart 可以使用mysql-proxy命令启动, /usr/local/mysql-proxy/bin/mysql-proxy--defaults-file=/usr/local/mysql-proxy/conf/f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mysql5624 地主 复制 atlas 实现 读写 分离