文章目录
mysql安装mycat安装,读写分离配置主从同步配置设置主库mysql的配置文件设置从库mysql的配置文件
分库分表配置同一个数据库下的分表操作
mysql安装
/opt 目录下创建mysql文件夹解压mysql的压缩包至mysql文件夹下
tar xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar -C mysql/
删除Mysql的MariaDB依赖
rpm -qa|grep mariadb [查找mariadb]
rpm -e mariadb包全名 --nodeps
mysql文件夹下依次安装mysql的rpm包(common,libs,client,server)
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
启动mysql
service mysqld start
查找初始密码
vim /var/log/mysqld.log 或 grep password /var/log/mysqld.log
连接mysql
mysql -u root -p
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Javasm123!';// 密码要求有大小写、数字、特殊字符
修改mysql访问权限
show databases; 查看库
use mysql; [进入mysql数据库]
show tables; 查看 库中有哪些表
update user set host='%' where user = 'root'; [更改用户的访问权限]
flush privileges; [刷新权限缓存]
3306加入白名单
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
mycat安装,读写分离配置
从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的Server,前端用户可以把它看作是一个数据库代理。
其核心功能是读写分离,分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。
Mycat是一个Java应用,所以安装环境需要依赖JDK(1.7以上)
配置完成启动时,保证主从数据库都要有配置的库。
解压Mycat安装包
tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
将文件夹移至/usr/local/
mv mycat /usr/local/
修改server.xml(mycat/conf目录下)
修改schema.xml schema配置文件是用来描述逻辑数据库中的数据节点和读写库配置信息。
mycat端口号加入白名单
firewall-cmd --permanent --zone=public --add-port=8066/tcp
firewall-cmd --reload
测试mycat
bin目录下Mycat 运行命令
- ./mycat start 启动
- ./mycat stop 停止
- ./mycat restart 重新启动
查看Mycat运行日志
- tail –f mycat.log
调整日志等级
- 修改log4j2.xml的日志等级为debug
使用mysql命令登入Mycat
- mysql -u root -p -P8066 -h 127.0.0.1
主从同步配置
设置主库mysql的配置文件
编辑/etc/my.cnf
添加服务id配置 在/etc/my.cnf里面加上:
server-id=1 (保证唯一)
开启二进制日志文件(通过日志控制同步) 在/etc/my.cnf里面加上:
log-bin=/var/lib/mysql/mysql-bin
重启mysql
service mysqld restart
连接数据库
mysql -u root -p
执行sql,复制File和Position的值,需要给slave(从库)使用
show master status;
设置从库mysql的配置文件
编辑/etc/my.cnf
添加服务id配置:
server-id=2(保证唯一)
重启mysql连接数据库执行指令
stop slave;
执行指令
change master to master_host='主库IP',
master_port=3306, master_user='主库用户名',
master_password='主库密码',
master_log_file='主库刚刚查到的File值',
master_log_pos= Position值;
执行指令
start slave;
查看slave状态
show slave status \G;
分库分表配置
两种分法:
使用mycat进行分库分表,需要多个mysql应用,分成同名的数据库以及同名表的水平拆分。由mycat统一管理,代码层面无需改动。
数据库中间件Mycat+SpringBoot完成分库分表
在同一个数据库下,将一张大数据量的表拆分成多个子表,表名后缀使用_XX(一般0-99)区分,数据的主键Id列后两位与表名后缀数字相同。crud操作严格按照id执行,解析id得到需要操作的表,代码层面也需要动态拼接表名后缀。(此方法一般用于app的后台接口查询,不用于后台管理系统) 按月份分表
同一个数据库下的分表操作
navcat执行查询(编写一个创建表的存储过程函数)
DELIMITER $$
USE `crm
`$$
DROP PROCEDURE IF EXISTS `pro_TableCreate
`$$
CREATE DEFINER=`root
`@`%` PROCEDURE `pro_TableCreate
`(
)
BEGIN
DECLARE i
INT;
DECLARE table_name
VARCHAR(20);
SET i
= 0;
WHILE i
<100 DO
IF i
<10 THEN
SET table_name
= CONCAT
('pn_book_0',i
);
ELSE
SET table_name
= CONCAT
('pn_book_',i
);
END IF;
SET @csql = CONCAT
(
'CREATE TABLE ',table_name
,'(
`bid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "数据整合后,花生统一的图书id序列号",
`book_id` bigint(20) NOT NULL COMMENT "书籍ID",
`book_name` varchar(50) NOT NULL COMMENT "书籍名称",
`author_name` varchar(50) DEFAULT NULL COMMENT "作者名称",
`attribution` tinyint(4) DEFAULT NULL COMMENT "1.男频 2.女频 3.出版",
`ftype_id` int(11) DEFAULT NULL COMMENT "一级分类ID",
`stype_id` int(11) DEFAULT NULL COMMENT "二级分类ID",
`status` int(2) DEFAULT NULL COMMENT "书籍状态:1连载 2完本",
`is_vip` tinyint(1) DEFAULT NULL COMMENT "是否收费:0免费 1收费",
`description` varchar(1000) DEFAULT NULL COMMENT "图书简介",
`cover_url` varchar(100) DEFAULT NULL COMMENT "封面url地址",
`keyword` varchar(50) DEFAULT NULL COMMENT "图书关键字",
`word_count` varchar(20) DEFAULT NULL COMMENT "图书当前总字数",
`last_update_chapter_id` int(10) DEFAULT NULL COMMENT "最新章节ID",
`last_update_chapter_name` varchar(50) DEFAULT NULL COMMENT "最新章名",
`isRecommand` tinyint(1) NOT NULL DEFAULT "0" COMMENT "是否推荐首页:1推荐 0不推荐",
`bookPartner` bigint(20) DEFAULT "0" COMMENT "小说合作商户id",
`read_count` int(11) DEFAULT "1000" COMMENT "阅读人数",
PRIMARY KEY (`bid`),
KEY `bid` (`bid`,`book_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1001058 DEFAULT CHARSET=utf8 COMMENT="创别图书表";'
);
PREPARE create_stmt
FROM @csql;
EXECUTE create_stmt
;
SET i
= i
+1;
END WHILE;
END$$
DELIMITER ;
执行完成后,会新增有一个函数
右键运行函数
分表完成
如果配有主从同步,从库中也会有新增的分表。在任一从库中新增分表,主库及其他从库均不会实时新增,函数也不会生成。