数据库扩展解决了什么问题?
在实际应用场景中,MySQL 复制 90% 以上都是一个 Master 复制到一个或者多个 Slave 的架构模式。

缺点:
由于 master 需要进行常规维护停机了,那必须要把一个slave提成master,会存在某一个 slave 提成 master 后,存在当前 master 和挂掉之前的 master 数据不一致的情况,并且之前 master 并没有保存当前 master 节点的 binlog 文件和 pos 位置。

配合第三方的工具,比如 keepalived 轻松做到 IP 的漂移,当一个 master 挂掉后,请求转移到另一个 master。

如果读压力加大,就需要更多的 slave 来解决,但是如果 slave 的复制全部从 master 复制,势必会加大 master 的复制 IO 的压力,所以就出现了级联复制,减轻 master 压力。缺点是 slave 延迟更加大了。

这样解决了单点 master 的问题,解决了 slave 级联延迟的问题。

MySQL 复制支持异步复制、半同步复制:异步复制时不需要等待 slave 返回。
半同步复制失败后会切换为异步。
master配置
server-id=135
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
lower_case_table_names=1
#binlog-do-db=mstest //要同步的mstest数据库,要同步多个数据库
#binlog-ignore-db=mysql //要忽略的数据库
slave配置
server-id=133
log-bin=mysql-bin
auto-increment-increment=2
auto-increment-offset=2
lower_case_table_names=1
#replicate-do-db = wang #需要同步的数据库
#binlog-ignore-db = mysql
#binlog-ignore-db = information_schema
GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;

change master to master_host='192.168.88.135',master_port=3307,master_user='repluser',master_password='Jack@123456',master_log_file='mysql-bin.000001',master_log_pos=154;
start slave;
show slave status\G
show global variables like "%log%";
SHOW PROCESSLIST;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
数据切分指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。
数据切分分为两种:

垂直切分的优点:
垂直切分缺点:
部分表关联无法在数据库级别完成,需要在程序中完成,存在跨库 join 的问题,对于这类的表,就需要去做平衡,是数据库让步业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用;在系统初期,数据量比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需要必须去做分割。
对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,不一定能满足要求。
事务处理相对更为复杂。
切分达到一定程度之后,扩展性会遇到限制。
过多切分可能会带来系统过渡复杂而难以维护。
水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中。

水平切分的优点:
水平切分的缺点: