linux系统下mysql的安装

国内镜像地址

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
  1. 修改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
  1. 忘记密码如何修改密码
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;









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值