Linux服务器开发之MySQL 集群方案

案例:
100W 的客户端 , 每三分钟上传一次数据 。数据库如何设计?能够查询所有记录?

Linux服务器开发之MySQL 集群方案

文章插图
 
官方 MySQL 集群方案
MySQL Replication
MySQL Replication 是 mysql 自带的功能 , 主从复制是通过重放 binlog 实现主库数据的
异步复制 。即当主库执行了一条 sql 命令 , 那么在从库同样地执行一遍 , 从而达到主从复制
的效果 。在这个过程中 , master 对数据的写操作记入二进制日志文件中(binlog) , 生成一
个 log dump 线程 , 用来给从库的 i/o 线程传 binlog 。而从库的 i/o 线程去请求主库的
binlog , 并将得到的 binlog 日志写到中继日志(relaylog)中 , 从库的 sql 线程 , 会读
取 relaylog 文件中的日志 , 并解析成具体操作 , 通过主从的操作一致 , 而达到最终数据一
致 。
MySQL Replication 一主多从的结构 , 主要目的是实现数据的多点备份(没有故障自动转移和
负载均衡) 。相比于单个的 mysql , 一主多从下的优势如下:
1. 如果让后台读操作连接从数据库 , 让写操作连接主数据库 , 能起到读写分离的作用 , 这
个时候多个从数据库可以做负载均衡 。
2. 可以在某个从数据库中暂时中断复制进程 , 来备份数据 , 从而不影响主数据的对外服务
(如果在 master 上执行 backup , 需要让 master 处于 readonly 状态 , 这也意味着所有的
write 请求需要阻塞) 。
就各个集群方案来说 , 其优势为:
1. 主从复制是 mysql 自带的 , 无需借助第三方 。
2. 数据被删除 , 可以从 binlog 日志中恢复 。
3. 配置较为简单方便 。
其劣势为:
1. 从库要从 binlog 获取数据并重放 , 这肯定与主库写入数据存在时间延迟 , 因此从库的数
据总是要滞后主库 。
2. 对主库与从库之间的网络延迟要求较高 , 若网络延迟太高 , 将加重上述的滞后 , 造成最
终数据的不一致 。
3. 单一的主节点挂了 , 将不能对外提供写服务 。
配置主机:
$ sudo vim /etc/mysql/my.cnf
Linux服务器开发之MySQL 集群方案

文章插图
 
添加 log-bin , server_id修改 bind-address = 0.0.0.0mysql > create user replication@'%' identified by '123456';mysql > grant all privileges on *.* to 'replication'@'%' identified by '123456' with grant option;mysql > show master status;
Linux服务器开发之MySQL 集群方案

文章插图
 
配置从机
mysql > change master to master_host='192.168.189.133', master_port=3306,master_user='replication', master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=380;mysql > start slave;mysql> show slave statusG
Linux服务器开发之MySQL 集群方案

文章插图
 
问题 1
Linux服务器开发之MySQL 集群方案

文章插图
 
# mysql –u root -p> create user ‘wangbojing’@’%’ identified by ‘123456’;> grant all privileges on *.* to ‘wangbojing’@’%’ identified by‘123456’ with grant option;> SHOW DATABASES;> CREATE DATABASE VIP_ORDER;> CREATE TABLE TBL_USER (> U_ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT,> U_NAME VARCHAR(64) NOT NULL,> U_IMAGE LONGBLOB,> U_GENDER VARCHAR(64)> )# 性能测试
# sysbench src/lua/oltp_read_write.lua --tables=3 --table_size=500000 --mysql-user=root --mysql-password=123456 --mysql-host=192.168.2.217mysql-port=3306 --mysql-db=TBL_REPLICATION prepare
Linux服务器开发之MySQL 集群方案

文章插图
 
# sysbench src/lua/oltp_point_select.lua --tables=3 --table_size=500000 --mysqluser=root --mysql-password=zhaomeiping --mysql-host=192.168.2.217 --mysql-port=3306--mysql-db=TBL_REPLICATION --threads=128 --time=100 --report-interval=5 run
Linux服务器开发之MySQL 集群方案

文章插图
 

Linux服务器开发之MySQL 集群方案


推荐阅读