4555 字
23 分钟
数据库命令

[TOC]

数据库命令#

MySQL 查询命令详解(针对初学者)#

以下是每个查询命令的详细参数说明,帮助您理解每个关键字的作用:

关键字/参数作用语法说明示例值解释说明
SELECT选择要显示的列SELECT 列名 AS 别名SELECT A.emp_name AS 姓名决定查询结果中显示哪些数据
AS为列或表指定别名原始名 AS 别名A.emp_name AS 姓名给列或表起一个更易读的名称
FROM指定数据来源的表FROM 表名 AS 别名FROM employee AS A告诉数据库从哪个表获取数据
JOIN连接其他表JOIN 表名 AS 别名 ON 条件JOIN department AS B将多个表的数据关联起来
ON指定连接条件ON 表1.列 = 表2.列ON A.dep_id = B.dep_id定义两个表如何关联的规则
WHERE过滤条件WHERE 条件表达式WHERE emp_name='tom'筛选满足特定条件的记录
GROUP BY分组依据GROUP BY 列名GROUP BY dep_name将数据按指定列分组
ORDER BY排序方式ORDER BY 列名 [ASC/DESC]ORDER BY A.age ASC按指定列排序结果
LIMIT限制返回行数LIMIT 行数LIMIT 1只返回指定数量的记录
COUNT()计算行数COUNT(列名)COUNT(A.emp_name)统计记录数量
SUM()计算总和SUM(数值列)SUM(A.age)计算数值列的总和
AVG()计算平均值AVG(数值列)AVG(A.age)计算数值列的平均值
LEFT JOIN左连接LEFT JOIN 表名 ON 条件LEFT JOIN department AS B包含左表所有记录,即使右表无匹配
RIGHT JOIN右连接RIGHT JOIN 表名 ON 条件RIGHT JOIN department AS B包含右表所有记录,即使左表无匹配

特殊符号说明:#

符号含义示例解释
.表与列的连接符A.emp_name表示表A的emp_name列
=等于比较A.dep_id = B.dep_id判断两个值是否相等
’ ‘字符串定界符'it'表示文本值
**; **语句结束符每个查询结尾的;表示SQL语句结束

表名和列名说明:#

名称类型示例解释
employee表名FROM employee员工信息表
department表名JOIN department部门信息表
emp_name列名A.emp_name员工姓名字段
dep_name列名B.dep_name部门名称字段
age列名A.age员工年龄字段
dep_id列名A.dep_id部门ID字段

别名说明:#

别名对应表示例解释
Aemployeeemployee AS A员工表的别名
Bdepartmentdepartment AS B部门表的别名
姓名emp_nameA.emp_name AS 姓名员工姓名的显示名称
部门dep_nameB.dep_name AS 部门部门名称的显示名称

查询示例详解:#

示例1:查询所有人所在的部门名称#

SELECT
A.emp_name AS 姓名, -- 从员工表选择姓名列,显示为"姓名"
B.dep_name AS 部门 -- 从部门表选择部门列,显示为"部门"
FROM employee AS A -- 主表是员工表,别名为A
JOIN department AS B -- 连接部门表,别名为B
ON A.dep_id = B.dep_id; -- 连接条件:员工表的部门ID = 部门表的部门ID

示例5:查询哪个员工目前所在的部门还没有成立#

SELECT
A.emp_name AS 姓名,
B.dep_name AS 部门
FROM employee AS A
LEFT JOIN department AS B -- 左连接:保留所有员工记录
ON A.dep_id = B.dep_id
WHERE B.dep_name IS NULL; -- 只显示部门名称为空的记录

示例8:查询哪个部门的年龄总和最高#

SELECT
SUM(A.age) AS 年龄总和, -- 计算年龄总和
B.dep_name AS 部门
FROM employee AS A
JOIN department AS B
ON A.dep_id = B.dep_id
GROUP BY B.dep_name -- 按部门分组
ORDER BY 年龄总和 DESC -- 按年龄总和降序排序
LIMIT 1; -- 只显示第一条记录(最高值)

总结:

  • ​​SELECT​​:指定要显示的列。
  • ​​FROM​​:指定数据来源的表。
  • ​​JOIN … ON​​:连接另一个表,并指定连接条件。
  • ​​WHERE​​:过滤行。
  • ​​GROUP BY​​:分组,通常与聚合函数一起使用。
  • ​​ORDER BY​​:排序。
  • ​​LIMIT​​:限制返回的行数。

创建用户#

mysql > create【克瑞特】 user '用户名'@'被允许连接的主机名称或主机的IP地址' identified ed by【拜】 '用户密码';
mysql > create【克瑞特】 user '用户名'@'被允许连接的主机名称或主机的IP地址' identified ed by '用户密码';

查询MySQL服务器中所有用户及其允许连接的主机。#

mysql > select【涩莱克特】 user,host from【弗乱】 mysql.user;
mysql > select user.host from mysql.user;

查看所有数据库信息#

SHOW DATABASES;

配置远程访问权限#

查看 root 用户的权限情况 :#

SELECT host, user FROM mysql.user WHERE user = 'root';

添加和更新用户权限:#

CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '123';
-- **作用**:创建用户账号。
-- **说明**:这条命令创建了一个名为 `root` 的用户,并设置其密码为 `123`。`'%'` 表示该用户可以从任何远程主机连接到 MySQL 服务器。命令成功执行,
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- **作用**:授予权限。
-- **说明**:
-- `ALL PRIVILEGES`: 这意味着授予所有数据库的**所有操作权限**,包括 `SELECT`(查询), `INSERT`(插入), `UPDATE`(更新), `DELETE`(删除), `DROP`(删除表)等。
-- `WITH GRANT OPTION`: 这表示 `root` 用户**可以将其拥有的权限(这里是所有权限)再授予其他用户**。
FLUSH PRIVILEGES; # 刷新权限使更改生效
-- **作用**:重新加载权限表。
-- **说明**:MySQL 的权限信息主要存储在 `mysql` 数据库的权限表(如 `user`, `db`, `tables_priv` 等)中。通常,使用 `GRANT`/`REVOKE` 等权限管理语句后,权限会自动更新到内存中,无需手动执行 `FLUSH PRIVILEGES`
-- **何时需要**:如果你**直接使用 `INSERT`、`UPDATE` 或 `DELETE` 语句手动修改了权限表**,那么必须执行 `FLUSH PRIVILEGES;` 来通知服务器重新加载权限,使更改生效。在你的操作流程中,这条命令是**多余的,但不是错误的**。
-- 授予root账户对moershi.user表【仅查询】权限 (核心修正)
GRANT SELECT ON moershi.user TO 'root'@'%';
-- 1. 撤销该用户在 moershi.user 表上的所有权限
REVOKE ALL PRIVILEGES ON moershi.user FROM 'roor'@'%';
-- 2. 撤销其授予权限的能力
REVOKE GRANT OPTION ON moershi.user FROM 'roor'@'%';
-- 3. 授予它本应拥有的唯一权限:查询(SELECT)
GRANT SELECT ON moershi.user TO 'roor'@'%';

解释选项:#

'root'@'sfta188299c.sf.com':显式指定客户端主机名(精确匹配)。
GRANT ALL PRIVILEGES:授予完全权限(可根据需求调整,如 GRANT SELECT, INSERT ON database.*)。
IDENTIFIED BY:设置或更新密码(如未定义用户,会创建新用户)。
更安全的替代:如果客户端使用 IP 而非域名,可以用 IP 地址授权(如 'root'@'192.168.99.1'),减少 DNS 依赖。

在 MySQL 5.7 中修改 root 用户密码,可以通过以下方法操作:#

方法一:在 MySQL 命令行中直接修改#

1. 登录后,执行以下命令(替换 新密码 为你要设置的密码):#

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

(如果 root 允许远程连接,可能需要同时修改 'root'@'%' 的密码)

2. 刷新权限使修改生效:#

FLUSH PRIVILEGES;

3. 退出 MySQL 重新登录验证:#

exit;

方法二:使用 set password 命令#

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');
FLUSH PRIVILEGES;

方法三:使用 bin/mysqladmin 命令#

Terminal window
[root@mysql mysql_3306]# bin/mysqladmin -uroot password '123456' -p #'123456'要设置的密码
Enter password: ##旧密码\初始密码
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@mysql mysql_3306]# bin/mysql -uroot -p
Enter password: ##修改后的新密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye
[root@mysql mysql_3306]# pwd
/mysql_3306

注意事项#

  • 密码需符合 MySQL 的安全策略(默认要求包含大小写字母、数字和特殊字符,长度至少 8 位)。
  • 如果后续登录提示密码错误,可检查是否是 'root'@'localhost''root'@'%' 权限的密码未统一设置。
  • 若忘记密码,需通过 --skip-grant-tables 方式启动 MySQL 进行重置(此为特殊场景操作)。

修改字符集#

修改数据库字符集#

-- 修改数据库字符集
ALTER DATABASE db_fq CHARACTER SET utf8 COLLATE utf8_general_ci;

修改服务器字符集配置#

编辑 MySQL 配置文件(通常是 /etc/my.cnf或 /mysql_3306/my.cnf):

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8

重启 MySQL 服务:#

Terminal window
service mysql_3306 restart

验证字符集配置#

SHOW VARIABLES LIKE 'character_set%';
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'db_fq';

数据库权限修改#

解决方案#

您需要为这个新创建的 'root'@'%' 用户授予适当的数据库访问权限:

方案1:授予所有权限(推荐用于管理)#

-- 授予所有数据库的所有权限(类似超级用户)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;

方案2:授予特定数据库的权限#

-- 授予特定数据库的所有权限(例如 test 数据库)
GRANT ALL PRIVILEGES ON test.* TO 'root'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

方案3:授予只读权限(更安全)#

-- 授予所有数据库的只读权限
GRANT SELECT ON *.* TO 'root'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

验证权限#

授予权限后,您可以验证用户的权限:

-- 查看用户权限
SHOW GRANTS FOR 'root'@'%';

安全建议#

虽然使用 root 作为远程用户名很方便,但从安全角度考虑,我建议:

  1. 创建专用管理账户
CREATE USER 'admin_remote'@'%' IDENTIFIED BY '复杂密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin_remote'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  1. 限制访问来源(更安全):
-- 只允许从特定IP段连接
CREATE USER 'admin_remote'@'192.168.88.%' IDENTIFIED BY '复杂密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin_remote'@'192.168.88.%';
FLUSH PRIVILEGES;

总结#

您遇到的问题是因为新创建的 'root'@'%' 用户还没有被授予访问普通数据库的权限。只需要执行相应的 GRANT 语句即可解决。

建议操作

-- 在每台MySQL服务器上执行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

执行后,您再用这个账户远程连接,就能看到所有数据库了。

因GTID 不一致导致复制中断,无法同步从库#

  1. all.sql 备份文件包含了 GTID 信息

    • 当您导入 all.sql 时,它可能包含 SET @@GLOBAL.GTID_PURGED 语句
    • 这会修改主库的 GTID 执行历史,但与从库的 GTID 历史不匹配
    • 从库检测到 GTID 不一致,会停止复制或跳过这些事务
  2. moershi.sql 可能不包含 GTID 信息

    • 这个文件可能是使用 --set-gtid-purged=OFF 选项生成的
    • 或者是一个不包含 GTID 信息的传统备份
    • 因此导入后不会影响 GTID 一致性,复制可以正常进行

解决方案#

请按照以下步骤彻底解决这个问题:

方案1:完全重置 GTID(推荐)#

这是最彻底的解决方案,但需要在维护窗口进行:

Terminal window
# 1. 停止所有从库复制
mysql -uroot -p -e "STOP SLAVE;"
# 2. 在主库上重置 GTID 信息(会清除所有二进制日志)
mysql -uroot -p -e "RESET MASTER;"
# 3. 重新导入清理后的备份文件
sed -i '/SET @@GLOBAL.GTID_PURGED/d' all.sql
mysql -uroot -p < all.sql
# 4. 在从库上重新配置复制
mysql -uroot -p -e "
STOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO
MASTER_HOST='192.168.88.10',
MASTER_USER='slave',
MASTER_PASSWORD='123',
MASTER_AUTO_POSITION=1;
START SLAVE;
"
# 5. 检查复制状态
mysql -uroot -p -e "SHOW SLAVE STATUS\G" | grep -E 'Slave_IO_Running|Slave_SQL_Running'

方案2:手动跳过冲突的 GTID#

如果不想完全重置,可以尝试跳过冲突的 GTID:

-- 在从库上执行
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;

或者对于 GTID 复制:

-- 在从库上执行
STOP SLAVE;
SET GTID_NEXT='冲突的GTID编号';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;

方案3:重新生成正确的备份文件#

最好的长期解决方案是重新生成不包含 GTID 信息的备份:

Terminal window
# 在主库上重新生成备份
mysqldump --single-transaction --set-gtid-purged=OFF -u root -p --databases db_fq db_it db_my test1 > all_new.sql
# 导入新备份
mysql -uroot -p < all_new.sql

验证和确认#

执行解决方案后,请验证:

  1. 检查主库数据库

    Terminal window
    mysql -uroot -p -e "SHOW DATABASES;"
  2. 检查从库复制状态

    Terminal window
    mysql -uroot -p -e "SHOW SLAVE STATUS\G" | grep -E 'Slave_IO_Running|Slave_SQL_Running'
  3. 检查数据同步

    Terminal window
    # 在主库上创建测试数据
    mysql -uroot -p -e "USE test1; CREATE TABLE IF NOT EXISTS sync_test (id INT); INSERT INTO sync_test VALUES (1);"
    # 在从库上检查
    mysql -uroot -p -e "USE test1; SELECT * FROM sync_test;"

预防措施#

为了避免未来出现类似问题:

  1. 使用正确的备份选项

    Terminal window
    # 生成用于主从环境的备份
    mysqldump --single-transaction --set-gtid-purged=OFF -u root -p --databases your_database > backup.sql
  2. 定期检查 GTID 一致性

    -- 在主库上执行
    SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
    -- 在从库上执行
    SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
  3. 监控复制状态

    Terminal window
    # 定期检查复制状态
    mysql -uroot -p -e "SHOW SLAVE STATUS\G" | grep -E 'Slave_IO_Running|Slave_SQL_Running|Seconds_Behind_Master'

总结#

您遇到的问题是由于 all.sql 备份文件包含 GTID 信息,导致主从库的 GTID 历史不一致,从而阻止了复制。而 moershi.sql 不包含 GTID 信息,所以能够正常同步。

推荐解决方案:使用方案1完全重置 GTID,这是最彻底的方法。如果您需要更详细的指导或在执行过程中遇到问题,请随时告诉我!

关闭/降低数据库密码策略等级#

完全卸载密码验证组件#

1. 登录 MySQL:#

Terminal window
mysql -uroot -p

2. 检查并卸载密码验证组件:#

-- 初次登录需要复杂密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password123!';
-- 查看已安装的组件
SELECT * FROM mysql.component;
-- 卸载密码验证组件
UNINSTALL COMPONENT 'file://component_validate_password';
-- 再次检查密码验证相关变量
SHOW VARIABLES LIKE 'validate_password%';

3. 现在尝试修改密码:#

ALTER USER 'root'@'localhost' IDENTIFIED BY '123';

mysql 密码强度设置#

validate_password_policy=0

  • 含义:设置密码策略的安全级别
  • 可选值
    • 0/ LOW:只检查密码长度
    • 1/ MEDIUM:长度 + 数字 + 大小写字母 + 特殊字符(默认值)
    • 2/ STRONG:在 MEDIUM 基础上增加字典文件检查

validate_password_length=4

  • 含义:设置密码的最小长度要求
  • 默认值:通常是 8

相关参数说明(扩展)

参数含义默认值说明
validate_password_number_count最少数字数量1密码中至少包含的数字个数
validate_password_mixed_case_count最少大小写字母数量1至少需要的大小写字母总数
validate_password_special_char_count最少特殊字符数量1!@#$%等符号的数量要求
validate_password_dictionary_file字典文件路径强策略下检查密码是否在字典中
validate_password_policy设置密码策略的安全级别
**`validate_password_length=4设置密码的最小长度要求

正确做法(生产环境)#

[mysqld]
# 保持中等或强密码策略
validate_password_policy=1 # 或 2
# 建议最小长度12+
validate_password_length=12
# 增强要求(可选)
validate_password_mixed_case_count=2 # 至少2个大小写字母
validate_password_special_char_count=1 # 至少1个特殊符号

合规密码示例:MyDB@Pass123!


如何生效?#

  1. 修改配置文件(如 /etc/my.cnf

  2. 重启MySQL服务

    systemctl restart mysqld
  3. 验证配置:

    SHOW VARIABLES LIKE 'validate_password%';

密码忘记#

Terminal window
# 修改主配置文件
# 手动添加此行 作用登陆时不验证密码
[root@mysql50 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
skip-grant-tables【忒-部s】
:wq
# 重启服务 作用让服务以新配置运行
[root@mysql50 ~]# # systemctl【西斯屯-ctl】 restart【 率 s 达r】 mysqld
# 连接服务
[root@mysql50 ~]# mysql
# 把mysql库下user表中 用户root的密码设置为无;
mysql> update mysql.user set authentication_string="" where user="root";
Query OK, 1 row affected (0.05 sec)
mysql> exit;
# 编辑配置文件
# 注释添加的行
[root@mysql50 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
#skip-grant-tables【忒-部s】
:wq
# 重启服务 作用让注释生效
[root@mysql50 ~]# systemctl【西斯屯-ctl】 restart【 率 s 达r】 mysqld
# 无密码登陆
[root@localhost ~]# mysql
# 设置root用户本机登陆密码
mysql> alter user root@"localhost" identified by "123";
mysql> exit;
总结
忘记密码
1. 修改mysql配置文件
`vim /etc/my.cnf.d/mysql-server.cnf `
`skip-grant-tables 不需要密码验证`
2. 重启mysql服务
`systemctl restart mysqld`
3. 无密码登录
`mysql`
4. 把密码修改为空
`update user set authentication_string="" where user="root";`
5. 修改mysql配置文件
`vim /etc/my.cnf.d/mysql-server.cnf `
去掉skip-grant-tables
6. 重启mysql服务
`systemctl restart mysqld`
7. 无密码登录
`mysql`
8. 在mysql终端里面设置密码
`alter user root@"localhost" identified by "NSD123456...a"`

maccms#

//查询
select art_id,art_name from maccms.mac_art where art_name like "%sds%";
select art_id,art_name from maccms.mac_art where art_name like "%sd%";
select art_id,art_name from maccms.mac_art where art_name like "%妈%" or art_name like "%母%" or art_name like "%狗%";
select vod_id,vod_name from maccms.mac_vod where vod_name like "%妈%" or vod_name like "%母%" or vod_name like "%狗%";
//删除
delete from maccms.mac_art where art_name like "%妈%" or art_name like "%母%" or art_name like "%狗%";
delete from maccms.mac_vod where vod_name like "%妈%" or vod_name like "%母%" or vod_name like "%狗%";
//导出
mysqldump -uroot -p maccms mac_vod --where="vod_name LIKE '%妈%'" > mac_vod.sql
// 第一次导出时包含表结构
mysqldump -uroot -p123 maccms mac_vod --where="vod_name like '%妈%' or vod_name like '%母%' or vod_name like '%狗%'" > mac_vod.sql
// 后续导出只追加数据,不包含表结构
mysqldump -uroot -p123 maccms mac_vod --no-create-info --where="vod_name like '%妈%' or vod_name like '%母%' or vod_name like '%狗%'" >> mac_vod.sql
// 第一次导出时包含表结构
mysqldump -uroot -p123 maccms mac_art --where="art_name like '%妈%' or art_name like '%母%' or art_name like '%狗%'" > mac_art.sql
// 后续导出只追加数据,不包含表结构
mysqldump -uroot -p123 maccms mac_art --no-create-info --where="art_name like '%妈%' or art_name like '%母%' or art_name like '%狗%'" >> mac_art.sql
// 删除
mysql -uroot -p123 -e "delete from maccms.mac_art where art_name like '%妈%' or art_name like '%母%' or art_name like '%狗%';"
mysql -uroot -p123 -e "delete from maccms.mac_vod where vod_name like '%妈%' or vod_name like '%母%' or vod_name like '%狗%';"
vim export_and_delete.sh
#!/bin/bash
# 数据库配置
DB_USER="root"
DB_PASSWORD="123"
DB_NAME="maccms"
# 导出文件路径
VOD_FILE="mac_vod.sql"
ART_FILE="mac_art.sql"
# 创建日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# 检查并执行 mac_vod 表的导出
if [ ! -f "$VOD_FILE" ]; then
log "首次导出 mac_vod 表(包含表结构)"
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME mac_vod --where="vod_name like '%妈%' or vod_name like '%母%' or vod_name like '%狗%'" > $VOD_FILE
else
log "追加导出 mac_vod 表数据"
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME mac_vod --no-create-info --where="vod_name like '%妈%' or vod_name like '%母%' or vod_name like '%狗%'" >> $VOD_FILE
fi
# 检查并执行 mac_art 表的导出
if [ ! -f "$ART_FILE" ]; then
log "首次导出 mac_art 表(包含表结构)"
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME mac_art --where="art_name like '%妈%' or art_name like '%母%' or art_name like '%狗%'" > $ART_FILE
else
log "追加导出 mac_art 表数据"
mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME mac_art --no-create-info --where="art_name like '%妈%' or art_name like '%母%' or art_name like '%狗%'" >> $ART_FILE
fi
# 删除数据库中的对应数据
log "删除数据库中符合条件的数据"
mysql -u$DB_USER -p$DB_PASSWORD -e "DELETE FROM $DB_NAME.mac_vod WHERE vod_name like '%妈%' or vod_name like '%母%' or vod_name like '%狗%';"
mysql -u$DB_USER -p$DB_PASSWORD -e "DELETE FROM $DB_NAME.mac_art WHERE art_name like '%妈%' or art_name like '%母%' or art_name like '%狗%';"
log "操作完成"
chmod +x export_and_delete.sh
bash export_and_delete.sh
crontab -e
0 6 * * * /root/maccms/sql/export_and_delete.sh >> /root/maccms/sql/export_log.txt 2>&1
数据库命令
https://fuwari.vercel.app/posts/数据库/数据库命令/
作者
肥猫少杰
发布于
2026-06-02
许可协议
CC BY-NC-SA 4.0