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

    科技2025-05-23  42

    文章目录

    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 ;

    执行完成后,会新增有一个函数

    右键运行函数

    分表完成

    如果配有主从同步,从库中也会有新增的分表。在任一从库中新增分表,主库及其他从库均不会实时新增,函数也不会生成。
    Processed: 0.009, SQL: 8