Mysql数据库进阶之(分表分库,主从分离)
前言:数据库的优化是一个程序员的分水岭,作为小白我也得去提前学习这方面的数据的
(一) 三范式和逆范式
听起范式这个迟非常专业我来举个简单的栗子:
第一范式就是: 把能够关联的每条数据都拆分成一个表
第二范式就是:把能够关联的每条数据写在一个表格中去
第三范式就是:把一些重复的字段再划分多一个表来存(这样做查询数据时候只能连表来操作)给查询带来压力
逆范式就是:宁愿牺牲一些冗余的数据把所有的字段都往一个表格里面存,这样有利于提高查询速度.
(二)垂直分表和水平分表设计
1.水平分表
create table cakes
(
id int unsigned primary key auto_increment,
cakename varchar(16)
)charset=utf8 partition by range(id)(
#分表名称cake1000,范围是id=1 to id=999
partition cake1000 values less than(1000),
#分表名称cake1000,范围是id=1000 to id=1999
partition cake2000 values less than(2000)
); 说明这里通过id标识来分表,主要表格的id如果超过了规定的值就会进入下一个表格
//这个功能主要是用在表格已经生成了但是后面添加的
alter table 表名 add partition (
partition 分表名称 values less than (范围)
) //删除分表的功能
alter table 表名 drop partition 分表名称;
2.垂直分表
create table goods
(
id int unsigned comment '不能在list分表使用索引',
proname varchar(10) not null,
source varchar(20) comment '原料',
`money` varchar(10) not null,
addtime datetime not null comment '2018-03-25 11:22:33'
)charset=utf8 partition by list( month(addtime) )(
partition spring values in(3,4,5), #春季
partition summer values in(6,7,8), #夏季
partition autumn values in(9,10,11), #秋季
partition winter values in(12,1,2) #冬季
); //注意这里是以月份进行分表的,并且id这个字段不能为主键和唯一键索引
//这个功能主要是用在表格已经生成了但是后面添加的
alter table 表名 add partition (
partition 分表名称 values in (范围)
) create index normal_id on goodsYear(id); //通常都是以普通键索引来做为ID
alter table 表名 drop partition 分表名称;
(三) MySQL 的 Grant 用户授权
即:在 MySQL 中默认存在一个本地用户访问的机制,其他服务器是无法访问的另一台服务器的MySQL 数据库,是会报没有权限的
如果希望当前服务器被其他服务器访问就需要使用 Grant 用户授权技术
//授权语句
GRANT ALL PRIVILEGES ON *.* TO '授权用户名'@'被授权服务器的IP' IDENTIFIED BY '授权密码';
//立即生效
FLUSH PRIVILEGES;
//如果授权成功效果,通过命令查看mysql中的系统用户表:
select host,user from mysql.user where user=授权用户名
//测试是否能在别的服务器访问本服务器的数据库
mysql -u授权的用户名 -p授权的密码 -h访问的主机
(四)binlog 日志
show variables like 'log_bin' : 该函数主要用于查看binlog日志是否已经开启
show master status : 该函数主要查看用于Master数据库正在使用的binlog日志情况
show slave status \G: 该函数主要用于Slave数据库是否已经同步
以上函数如果不用于主从复制和读写分离的配置当中,等同没用
(五)读写分离和主从复制
1.主从首要条件:①关闭 selinux ②关闭 iptables ③ master 已经对 slave 进行 grant 授权
create database php32 charset utf8; 在 master 服务器中开启 binlog 日志和设置要发生主从同步数据库(my.cnf) #mysql的bin-log 日志配置选项,假设 做读写(主从)分离,这个选项在从服务器必须关闭 log-bin=mysql-bin #1.主服务器的id,这个 id 不一定设为 1,只要主从不一样就行 server-id=1 #2.要做同步的数据库名字,可以是多个数据库,之间用分号分割 binlog-do-db=php32 #3.保存重启mysql
service mysqld restart #4.显示状态(里面显示的数据用在从服务器使用)
show master status;
#从服务器
servir-id = 2 (这里只要和主服务器不同就行了)
#登录
mysql -uxxx -pxxx
#认证从服务器
change master to master_host='主服务器的IP地址',
master_port=3306,#端口
master_user='xxx',#主服务器授权的用户名
master_password='xxx',#主服务器授权的用户密码
master_log_file='mysql-bin.000007',#主服务器上的bin-log日志
master_log_pos=106;#主服务器上的 bin-log日志值 #启动主从服务
start slave;
stop slave; -- 停止
reset slave; -- 重置
start slave; -- 启动 #登录slave服务器中,查看show slave status\G,看到如下选项代表主从复制同步成功:
show slave status\G
最后注意:如果开发中写的操作发生slave当中,主从同步马上宣告失败,因此开发中,我们必须清楚 master 和 slave 服务器,slave 我们只是让它负责 select,但是 slave 是可以 insert 数据的,但是清楚风险所在.







Mysql数据库进阶之(分表分库,主从分离)的更多相关文章
- mysql数据库为什么要分表和分区?
一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...
- efcore在Saas系统下多租户零脚本分表分库读写分离解决方案
efcore在Saas系统下多租户零脚本分表分库读写分离解决方案 ## 介绍 本文ShardinfCore版本x.6.0.20+ 本期主角: - [`ShardingCore`](https://gi ...
- 由mysql分区想到的分表分库的方案
在分区分库分表前一定要了解分区分库分表的动机. 对实时性要求比较高的场景,使用数据库的分区分表分库. 对实时性要求不高的场景,可以考虑使用索引库(es/solr)或者大数据hadoop平台来解决(如数 ...
- mysql大数据解决方案--分表分库(0)
引言 对于一个大型的互联网应用,海量数据的存储和访问成为了系统设计的瓶颈问题,对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式. •水 ...
- sharding sphere 分表分库 读写分离
sharding jdbc: sharding sphere 的 一部分,可以做到 分表分库,读写分离. 和 mycat 不同的 是 sharding jdbc 是 一个 jdbc 驱动 在 驱动这个 ...
- mysql数据库分区和分表
转载自 https://www.cnblogs.com/miketwais/articles/mysql_partition.html https://blog.csdn.net/vbirdbest/ ...
- 什么是分表和分区 MySql数据库分区和分表方法
1.为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性 ...
- 12-2 MySQL数据库备份(分表)
#!/bin/bash source /etc/profile DATE="$(date +%F_%H-%M-%S)" DB_IP="172.16.1.122" ...
- mycat 安装 分表 分库 读写分离
简单的 理解 一下 mycat :如图 mycat 是一个 连接数据库的中介.一个独立安装的 工具,他连接着真实的数据库,并且 把自己伪装成一个数据库. 程序连接 mycat ,mycat 连接 到真 ...
随机推荐
- 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)
动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...
- quartus prime 16.0 报警告 inferring latch
前言 当写always组合逻辑块时,可能会写出 poor code.综合时软件会推断出锁存器.例如下面代码: always @* begin 'b1) begin w = (a & b) ^ ...
- bzoj 1103 : [POI2007]大都市meg (树链剖分+线段树)
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...
- js-元素相关
获取元素方法一 可以使用内置对象document上的getElementById方法来获取页面上设置了id属性的元素,获取到的是一个html对象,然后将它赋值给一个变量,比如: <script ...
- 【bfs】迷宫问题
[题目描述] 定义一个二维数组: int maze[5][5] = { 0,1,0,0,0, 0,1,0,1,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, }; 它表示一个迷 ...
- 【原创】【状态压缩DP】POJ3254 Corn Fields【新手向】
一开始根本不会状压dp,上网各种找题解,但发现他们写的都很......反正我作为一个没有接触过状态压缩的,根本看不懂! 然后看了好多状态压缩的题的题解,总结了一下思路,思路很重要,有了思路转换成计算机 ...
- 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)
学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...
- django pymysql
此处django版本为1.11.13 设置setting.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NA ...
- 牛客小白月赛12J(序列自动机)
题目链接:https://ac.nowcoder.com/acm/contest/392/J 题目大意:给一个字符串s,然后在给出n个其他的字符串,判断每个字符串是否为s的子序列. 例: 输入: no ...
- staitc
一.static和非static变量 1. static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在.非static修饰 ...