[root@db03 ~]# /usr/local/mysql-proxy/bin/mysql-proxyd test start
OK: MySQL-Proxy of test is started
#检验启动
[root@db03 conf]# netstat -lntp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2345 0.0.0.0:* LISTEN 31101/mysql-proxy
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 31101/mysql-proxy
#根据配置文件中实例的名字,来选择atlas的启动的不同的实例
instance = test,new_test
3.Atlas使用
1.连接数据库
[root@db03 ~]# mysql -uuser -ppwd -P2345 -h127.0.0.1
2.执行命令
mysql> show databases;
ERROR 1105 (07000): use 'SELECT * FROM help' to see the supported commands
mysql> SELECT * FROM help;
+----------------------------+-------------------------------------
| command | description |
+----------------------------+-------------------------------------
| SELECT * FROM help | 查看帮助 |
| SELECT * FROM backends | 查看后端数据库主机'列表,状态,权限' (up down offline unknown) |
| SET OFFLINE $backend_id | DBA可平滑'下线DB'(状态,不是真正的坏掉) |
| SET ONLINE $backend_id | DBA可平滑'上线DB ' |
| ADD MASTER $backend | '添加'主库(权限) |
| ADD SLAVE $backend | '添加'从库 |
| REMOVE BACKEND $backend_id | '移除'后端数据库
|
| SELECT * FROM clients | 客户端列表 (ip和端口) |
| ADD CLIENT $client | 临时添加客户端 |
| REMOVE CLIENT $client | 临时移除客户端
|
| SELECT * FROM pwds | 客户端'用户名和密码' |
| ADD PWD $pwd | 添加客户端用户名和密码 |
| ADD ENPWD $pwd | 添加客户端用户名和'加密后'的密码
| REMOVE PWD $pwd | 移除客户端用户
|
| SAVE CONFIG | '保存'配置到配置文件 |
| SELECT VERSION | 查看Atlas版本 |
+----------------------------+-------------------------------------
#以上add remove等命令临时添加或移除,可以使用SAVE CONFIG;把修改保存到配置文件#web端需要知道atlas的主机ip(VIP),端口,登录用户和密码
[root@db03 ~]# vim /usr/local/mysql-proxy/conf/test.cnf#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
tables = school.stu.id.3
[root@db03 ~]# /usr/local/mysql-proxy/bin/mysql-proxyd test restart
OK: MySQL-Proxy of test is stopped
OK: MySQL-Proxy of test is started
5)测试
拆表
项目开发中,我们的数据库'数据越来越大',随之而来的是单个表中数据太多。以至于查询书读变慢,而且由于'表的锁机制'导致应用操作也搜到严重影响,出现了数据库性能瓶颈。
当出现这种情况时,我们可以考虑分表,即将单个数据库表进行拆分,拆分成多个数据表,然后'用户访问的时候,根据一定的算法',让用户访问不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。
#1.模拟原始的大表
create table member(
id bigint auto_increment primary key,
name varchar(20),
sex tinyint not null default '0'
)engine=myisam default charset=utf8 auto_increment=1;
插入数据,第二条语句多执行几次就有了很多数据
insert into member(id,name,sex) values (1,'jacson','0');
insert into member(name,sex) select name,sex from member;
#2.分成两个表tb_member1,tb_member2
DROP table IF EXISTS tb_member1;
create table tb_member1(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
DROP table IF EXISTS tb_member2;
create table tb_member2(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0'
)ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
//创建tb_member2也可以用下面的语句 create table tb_member2 like tb_member1;
#3.创建主表
DROP table IF EXISTS tb_member;
create table tb_member(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0'
)ENGINE=MERGE UNION=(tb_member1,tb_member2) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;
#4.把主表中的数据分到两个分表中去:(id%2 对id的数值取余数),总表只是一个外壳,存取数据发生在一个一个的分表里面。
insert tb_member1(id,name,sex) select id,name,sex from member whereid%2=0;
insert tb_member2(id,name,sex) select id,name,sex from member whereid%2=1;
#总结:
其实上面我们介绍的是'水平分表'的实施方法,还存在另一种方法叫做:'垂直分表'
垂直分表:
举例说明,在一个博客系统中,文章标题,作者,分类,创建时间等,是'变化频率慢,查询次数多',而且最好有很好的实时性的数据,我们把它叫做'冷数据'。
而博客的浏览量,回复数等,类似的统计信息,或者别的变化频率比较高的数据,我们把它叫做'活跃数据'。
#主从复制,mha,读写分离,存储引擎
1,存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。
2,对冷数据进行更多的从库配置,因为更多的操作是查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
3,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步