国内镜像地址
https://mirrors.sohu.com/mysql/MySQL-5.7/
https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/
安装步骤
1.下载安装包
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
2.解压
tar -zxvf /root/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
3.创建用户组及用户
groupadd mysql
useradd -g mysql mysql
4.创建mysql的数据存放文件夹
mkdir -p /usr/local/mysql/data
5.修改mysql的归属用户
chown -R mysql:mysql /usr/local/mysql
6.创建mysql配置文件my.cnf
[mysql]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
#设置3306端⼝
port = 3306
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=128M
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
https://blog.csdn.net/p358278505/article/details/125913861
或者修改my.cnf 文件
7.创建/var/lib/mysql⽬录并修改权限
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
8.正式开始安装MYSQL
./bin/mysqld --no-defaults --initialize --explicit_defaults_for_timestamp=true --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
9.复制启动脚本到资源⽬录
cd /usr/local/mysql
cp ./support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
10.设置MYSQL系统服务并开启⾃启
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
11.启动mysql并查看是否启动成功
service mysqld start
service mysqld status
12.配置环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
- 修改root密码并允许任意ip访问
alter user user() identified by "123456";
flush privileges;
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
14.测试远程连接
mysql -h ipaddress -P port -p password
- 忘记密码如何修改密码
vim /etc/my.cnf
skip-grant-tables
alter user user() identified by "123456";
flush privileges;
16.不小心删除了root用户怎么办
https://blog.csdn.net/weixin_67271870/article/details/126636316
17.使用宝塔面板进行安装mysql,
#修改my.cnf配置重启服务
#注意:8.0.x的版本不支持NO_AUTO_CREATE_USER,去掉即可
[mysqld]
lower_case_table_names=1
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
18.cte (mysql8.0)
#递归查询上级及本级数据
DROP TABLE IF EXISTS tb_category;
CREATE TABLE tb_category(
`creator` VARCHAR(32) COMMENT '租户号' ,
`create_time` DATETIME COMMENT '乐观锁' ,
`updater` VARCHAR(32) COMMENT '创建人' ,
`update_time` DATETIME COMMENT '创建时间' ,
`id` INT NOT NULL COMMENT '主键id' ,
`parent_id` INT COMMENT '父级id' ,
`name` VARCHAR(30) COMMENT '分类名称' ,
PRIMARY KEY (id)
) COMMENT = '分类表';
INSERT INTO `test`.`tb_category` (`id`, `parent_id`, `name`) VALUES (1, NULL, '根分类');
INSERT INTO `test`.`tb_category` (`id`, `parent_id`, `name`) VALUES (2, 1, '电子产品');
INSERT INTO `test`.`tb_category` (`id`, `parent_id`, `name`) VALUES (3, 2, '手机');
INSERT INTO `test`.`tb_category` (`id`, `parent_id`, `name`) VALUES (4, 3, '苹果手机');
WITH RECURSIVE cte AS (
SELECT id, parent_id, name
FROM tb_category
WHERE id = 4
UNION ALL
SELECT t.id, t.parent_id, t.name
FROM tb_category t
INNER JOIN cte c ON t.id = c.parent_id
)
SELECT * FROM cte;
性能比较差,一般采用内存进行处理,数据表加一个字段ancestors 参考ruoyi-vue进行处理
19.添加新用户并授权
DROP USER 'TT'@'%';
SELECT User, Host FROM mysql.user WHERE User = 'TT';
CREATE USER 'TT'@'%' IDENTIFIED BY 'TT@12345678';
flush PRIVILEGES;
create database TT CHARACTER SET utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON TT.* TO 'TT'@'%';
DROP USER 'hc_community'@'%';
SELECT User, Host FROM mysql.user WHERE User = 'hc_community';
create user 'hc_community'@'%' IDENTIFIED by 'hc_community@12345678';
flush PRIVILEGES;
create database hc_community CHARACTER SET utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON hc_community.* TO 'hc_community'@'%';
19.通过触发器处理ancestors便于查询子节点数据
CREATE TABLE `tb_tree` (
`id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键id',
`parent_id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '父id',
`ancestors` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '祖先集合(含本结点)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='树形表';
CREATE DEFINER=`root`@`%` TRIGGER `before_insert_tb_tree` BEFORE INSERT ON `tb_tree` FOR EACH ROW BEGIN
IF NEW.parent_id IS NULL OR NEW.parent_id = '0' THEN
-- 如果是根节点(parent_id 为 NULL 或 '0'),则ancestors只包含自己的ID
SET NEW.ancestors = NEW.id;
ELSE
-- 获取父节点的祖先路径并加上自己的ID,确保没有重复
SET @parent_ancestors = (SELECT ancestors FROM tb_tree WHERE id = NEW.parent_id);
IF @parent_ancestors IS NOT NULL AND LOCATE(CONCAT(',', NEW.parent_id, ','), CONCAT(',', @parent_ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(@parent_ancestors, ',', NEW.parent_id);
ELSE
SET NEW.ancestors = @parent_ancestors;
END IF;
IF LOCATE(CONCAT(',', NEW.id, ','), CONCAT(',', NEW.ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(NEW.ancestors, ',', NEW.id);
END IF;
END IF;
END;
CREATE DEFINER=`root`@`%` TRIGGER `before_update_tb_tree` BEFORE UPDATE ON `tb_tree` FOR EACH ROW BEGIN
IF OLD.parent_id != NEW.parent_id THEN
IF NEW.parent_id IS NULL OR NEW.parent_id = '0' THEN
-- 如果新的parent_id为NULL或'0',则表示成为根节点,ancestors只包含自己的ID
SET NEW.ancestors = NEW.id;
ELSE
-- 如果有新的父节点,则更新ancestors以包括新父节点及其祖先,确保没有重复
SET @new_parent_ancestors = (SELECT ancestors FROM tb_tree WHERE id = NEW.parent_id);
IF @new_parent_ancestors IS NOT NULL AND LOCATE(CONCAT(',', NEW.parent_id, ','), CONCAT(',', @new_parent_ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(@new_parent_ancestors, ',', NEW.parent_id);
ELSE
SET NEW.ancestors = @new_parent_ancestors;
END IF;
IF LOCATE(CONCAT(',', NEW.id, ','), CONCAT(',', NEW.ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(NEW.ancestors, ',', NEW.id);
END IF;
END IF;
END IF;
END;
#数据表简单设计
DROP TABLE IF EXISTS tb_tree;
CREATE TABLE tb_tree(
`id` VARCHAR(32) NOT NULL COMMENT '主键id' ,
`parent_id` VARCHAR(255) COMMENT '父id' ,
`ancestors` VARCHAR(255) COMMENT '祖先集合(含本结点)' ,
PRIMARY KEY (id)
) COMMENT = '树形表';
CREATE TABLE `tb_tree` (
`id` varchar(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键id',
`parent_id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '父id',
`ancestors` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '祖先集合(含本结点)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='树形表';
CREATE DEFINER=`root`@`%` TRIGGER `before_insert_tb_tree` BEFORE INSERT ON `tb_tree` FOR EACH ROW BEGIN
IF NEW.parent_id IS NULL OR NEW.parent_id = '0' THEN
-- 如果是根节点(parent_id 为 NULL 或 '0'),则ancestors只包含自己的ID
SET NEW.ancestors = NEW.id;
ELSE
-- 获取父节点的祖先路径并加上自己的ID,确保没有重复
SET @parent_ancestors = (SELECT ancestors FROM tb_tree WHERE id = NEW.parent_id);
IF @parent_ancestors IS NOT NULL AND LOCATE(CONCAT(',', NEW.parent_id, ','), CONCAT(',', @parent_ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(@parent_ancestors, ',', NEW.parent_id);
ELSE
SET NEW.ancestors = @parent_ancestors;
END IF;
IF LOCATE(CONCAT(',', NEW.id, ','), CONCAT(',', NEW.ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(NEW.ancestors, ',', NEW.id);
END IF;
END IF;
END;
CREATE DEFINER=`root`@`%` TRIGGER `before_update_tb_tree` BEFORE UPDATE ON `tb_tree` FOR EACH ROW BEGIN
IF OLD.parent_id != NEW.parent_id THEN
IF NEW.parent_id IS NULL OR NEW.parent_id = '0' THEN
-- 如果新的parent_id为NULL或'0',则表示成为根节点,ancestors只包含自己的ID
SET NEW.ancestors = NEW.id;
ELSE
-- 如果有新的父节点,则更新ancestors以包括新父节点及其祖先,确保没有重复
SET @new_parent_ancestors = (SELECT ancestors FROM tb_tree WHERE id = NEW.parent_id);
IF @new_parent_ancestors IS NOT NULL AND LOCATE(CONCAT(',', NEW.parent_id, ','), CONCAT(',', @new_parent_ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(@new_parent_ancestors, ',', NEW.parent_id);
ELSE
SET NEW.ancestors = @new_parent_ancestors;
END IF;
IF LOCATE(CONCAT(',', NEW.id, ','), CONCAT(',', NEW.ancestors, ',')) = 0 THEN
SET NEW.ancestors = CONCAT(NEW.ancestors, ',', NEW.id);
END IF;
END IF;
END IF;
END;