linux下的mysql安装及mycat读写分离、分库分表

mysql安装

  1. /opt 目录下创建mysql文件夹
  2. 解压mysql的压缩包至mysql文件夹下
tar xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar -C mysql/
  1. 删除Mysql的MariaDB依赖
rpm -qa|grep mariadb [查找mariadb]
rpm -e mariadb包全名 --nodeps
  1. 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
  1. 启动mysql
service mysqld start
  1. 查找初始密码
vim /var/log/mysqld.log 或  grep password /var/log/mysqld.log
  1. 连接mysql
mysql -u root -p
  1. 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Javasm123!';// 密码要求有大小写、数字、特殊字符
  1. 修改mysql访问权限
show databases; 查看库
use mysql; [进入mysql数据库]
show tables; 查看 库中有哪些表
update user set host='%' where user = 'root'; [更改用户的访问权限]
flush privileges; [刷新权限缓存]
  1. 3306加入白名单
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload

mycat安装,读写分离配置

  • 从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的Server,前端用户可以把它看作是一个数据库代理。

  • 其核心功能是读写分离,分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。

  • Mycat是一个Java应用,所以安装环境需要依赖JDK(1.7以上)

  • 配置完成启动时,保证主从数据库都要有配置的库。

  1. 解压Mycat安装包
tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  1. 将文件夹移至/usr/local/
mv mycat /usr/local/
  1. 修改server.xml(mycat/conf目录下)
    在这里插入图片描述

  2. 修改schema.xml
    schema配置文件是用来描述逻辑数据库中的数据节点和读写库配置信息。
    在这里插入图片描述

  3. mycat端口号加入白名单

firewall-cmd --permanent --zone=public --add-port=8066/tcp
firewall-cmd --reload
  1. 测试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 ;
  • 执行完成后,会新增有一个函数
    在这里插入图片描述

  • 右键运行函数
    在这里插入图片描述

  • 分表完成
    在这里插入图片描述

    • 如果配有主从同步,从库中也会有新增的分表。
    • 在任一从库中新增分表,主库及其他从库均不会实时新增,函数也不会生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值