mysqldump的权限说明

本文详细介绍了使用mysqldump进行数据库备份所需的权限设置过程。包括基本的SELECT权限、SHOW VIEW权限、LOCK TABLES权限和TRIGGER权限等,并通过具体实例演示了如何逐步授予这些权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysqldump 所需要的权限说明:

1、对于table 来说mysqldump 最少要有select 权限。
2、对于view 来说mysqldump 要有show view 权限。
3、对于trrigger 来说mysqldump 要有trriger 权限。
4、如果要产生一份一致的备份 mysqldump 要有lock tables 权限。

相关用户创建与授权语句:
create user dumper@'127.0.0.1';
grant select on tempdb.* to dumper@'127.0.0.1';
grant show view on tempdb.* to dumper@'127.0.0.1';
grant lock tables on tempdb.* to dumper@'127.0.0.1';
grant trigger on tempdb.* to dumper@'127.0.0.1';
例子:

1、创建一个用于备份的用户dumper@’127.0.0.1’

create user dumper@'127.0.0.1' identified by '123456';

2、用dumper@’127.0.0.1’去备份tempdb这个数据库、可以发生这个时候报没有select权限

mysqldump -h127.0.0.1 -udumper -p123456 --databases tempdb
Warning: Using a password on the command line interface can be insecure.
-- MySQL dump 10.13  Distrib 5.6.31, for linux-glibc2.5 (x86_64)
--
-- Host: 127.0.0.1    Database: tempdb
-- ------------------------------------------------------
-- Server version    5.6.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
mysqldump: Got error: 1044: Access denied for user 'dumper'@'127.0.0.1' to database 'tempdb' when selecting the database

3、为dumper 增加tempdb库上的select 权限

grant select on tempdb.* to dumper@'127.0.0.1';

4、用dumper@‘127.0.0.1’备份tempdb库

[root@workstudio ~]# mysqldump -h127.0.0.1 -udumper -p123456 --databases tempdb
Warning: Using a password on the command line interface can be insecure.
-- MySQL dump 10.13  Distrib 5.6.31, for linux-glibc2.5 (x86_64)
--
-- Host: 127.0.0.1    Database: tempdb
-- ------------------------------------------------------
-- Server version    5.6.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `tempdb`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tempdb` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `tempdb`;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

5、为tempdb 创建一个view 用来测试mysqldump备份view时要用到的权限

create view view_a as select 1 as number;

6、再次试着用dumper@‘127.0.0.1’去备份tempdb、日了狗了可以看到这个报错说是和lock tables 相关。

[root@workstudio ~]# mysqldump -h127.0.0.1 -udumper -p123456 --databases tempdb
Warning: Using a password on the command line interface can be insecure.
-- MySQL dump 10.13  Distrib 5.6.31, for linux-glibc2.5 (x86_64)
--
-- Host: 127.0.0.1    Database: tempdb
-- ------------------------------------------------------
-- Server version    5.6.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `tempdb`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tempdb` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `tempdb`;
mysqldump: Got error: 1044: Access denied for user 'dumper'@'127.0.0.1' to database 'tempdb' when using LOCK TABLES

7、给dumper@’127.0.0.1’这个用户一个lock tables 权限

grant lock tables on tempdb.* to dumper@'127.0.0.1';

8、再次试着用dumper@‘127.0.0.1’去备份tempdb、这下可以看到了它报没有show view 权限了。

[root@workstudio ~]# mysqldump -h127.0.0.1 -udumper -p123456 --databases tempdb
Warning: Using a password on the command line interface can be insecure.
-- MySQL dump 10.13  Distrib 5.6.31, for linux-glibc2.5 (x86_64)
--
-- Host: 127.0.0.1    Database: tempdb
-- ------------------------------------------------------
-- Server version    5.6.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `tempdb`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tempdb` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `tempdb`;
mysqldump: Couldn't execute 'show create table `view_a`': SHOW VIEW command denied to user 'dumper'@'localhost' for table 'view_a' (1142)

9、为dumper@’127.0.0.1’这个用户加上show view 权限

grant show view on tempdb.* to dumper@'127.0.0.1';

10、再用dumper@’127.0.0.1‘用户备份tempdb库

[root@workstudio ~]# mysqldump -h127.0.0.1 -udumper -p123456 --databases tempdb
Warning: Using a password on the command line interface can be insecure.
-- MySQL dump 10.13  Distrib 5.6.31, for linux-glibc2.5 (x86_64)
--
-- Host: 127.0.0.1    Database: tempdb
-- ------------------------------------------------------
-- Server version    5.6.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `tempdb`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tempdb` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `tempdb`;

--
-- Temporary view structure for view `view_a`
--

DROP TABLE IF EXISTS `view_a`;
/*!50001 DROP VIEW IF EXISTS `view_a`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `view_a` AS SELECT 
 1 AS `number`*/;
SET character_set_client = @saved_cs_client;

--
-- Current Database: `tempdb`
--

USE `tempdb`;

--
-- Final view structure for view `view_a`
--

/*!50001 DROP VIEW IF EXISTS `view_a`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8 */;
/*!50001 SET character_set_results     = utf8 */;
/*!50001 SET collation_connection      = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `view_a` AS select 1 AS `number` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2016-07-19  5:56:17

11、如果是用mysqldump 来做备份、那么备份用户的相关权限如下:

create user dumper@'127.0.0.1';
grant select on tempdb.* to dumper@'127.0.0.1';
grant show view on tempdb.* to dumper@'127.0.0.1';
grant lock tables on tempdb.* to dumper@'127.0.0.1';
grant trigger on tempdb.* to dumper@'127.0.0.1';

转自:http://www.cnblogs.com/JiangLe/p/5682795.html

<think>好的,我现在需要帮助用户解答关于mysqldump命令中-h参数的用法和示例。首先,我得回忆一下mysqldump的基本用法,特别是主机参数的用途。用户提到他们想查找关于-h参数的具体示例,所以重点应该放在这个参数上。 首先,我应该确认-h参数的作用。根据之前的知识,mysqldump用于备份MySQL数据库,而-h用来指定连接的数据库服务器的主机名或IP地址。默认情况下,如果不指定-h,mysqldump会连接本地的MySQL实例,也就是localhost。当需要备份远程服务器上的数据库时,就需要使用-h参数来指定远程主机的地址。 接下来,我需要考虑如何构造示例命令。用户可能需要基本的用法,比如如何连接到远程主机,并备份特定的数据库。例如,mysqldump -h 远程主机名或IP -u 用户名 -p 数据库名 > 备份文件路径。这里需要注意,用户名需要有远程连接的权限,否则可能会失败,所以可能需要提醒用户检查权限设置。 然后,用户可能还需要更复杂的示例,比如备份所有数据库或者结合其他参数使用的情况。例如,使用-A参数备份所有数据库,或者结合--single-transaction来保证备份的一致性。这时候,-h参数的位置应该放在命令的最前面,紧接着mysqldump之后,然后是其他参数。 另外,引用中的资料提到了一些相关的命令,比如引用[3]中的例子使用了-A和-R等参数,这时候可以结合-h参数一起使用。比如:mysqldump -h hostname -u root -p -A --single-transaction > backup.sql。同时,可能还需要提到端口参数-P,因为如果远程MySQL服务器使用的不是默认端口3306,就需要用-P来指定端口号。 还需要注意,用户可能会混淆-h和--host,其实这两个是等价的,但通常使用-h更简洁。此外,密码安全方面,-p后面不直接跟密码,而是在提示后输入,避免密码泄露在命令历史中。 在示例中,应该包括不同的情况,比如备份单个数据库、多个数据库、所有数据库,以及如何指定端口。同时,提醒用户在实际使用时替换具体的参数值,如主机名、用户名、数据库名和备份路径。 最后,根据用户的需求,生成相关问题,比如如何备份远程数据库、处理权限问题、使用其他参数优化备份等。这些问题应该围绕用户可能的后续疑问展开,帮助他们进一步理解和应用mysqldump命令。 总结一下,回答的结构应该是先解释-h参数的作用,然后给出基本语法和多个示例,覆盖不同场景,最后附上注意事项和相关问题。确保引用正确的参考资料,比如引用[3]中的示例和引用[4]中对mysqldump的总体评价,增强回答的可信度。</think>### mysqldump 的 `-h` 参数用法详解 `-h` 参数用于指定 MySQL 服务器的主机地址,适用于连接远程数据库的场景。以下是具体用法和示例: --- #### 1. 基本语法格式 ```bash mysqldump -h [主机名/IP地址] -u [用户名] -p [数据库名] > [备份文件路径] ``` --- #### 2. 核心参数说明 - `-h`: 指定 MySQL 服务器的主机名或 IP 地址(默认 `localhost`) - `-u`: 连接数据库的用户名(需有备份权限) - `-p`: 提示输入密码(安全输入方式) - `数据库名`: 需要备份的数据库名称(多个库用空格分隔) --- #### 3. 典型应用场景示例 ##### 场景 1:备份远程主机的单个数据库 ```bash # 备份远程主机 192.168.1.100 上的数据库 `mydb` mysqldump -h 192.168.1.100 -u root -p mydb > /backup/mydb_backup.sql ``` 执行后会提示输入密码,输入正确密码后生成备份文件[^3]。 --- ##### 场景 2:备份远程主机的多个数据库 ```bash # 同时备份 `db1` 和 `db2` 数据库 mysqldump -h mysql.example.com -u admin -p db1 db2 > /backup/multi_db_backup.sql ``` --- ##### 场景 3:备份远程主机的所有数据库 ```bash # 使用 -A 参数备份全部数据库 mysqldump -h 10.0.0.5 -u root -p -A > /backup/full_backup.sql ``` --- ##### 场景 4:指定非默认端口(结合 `-P` 参数) ```bash # 当 MySQL 服务端口为 3307 时 mysqldump -h db.example.com -P 3307 -u backup_user -p mydb > /backup/port_specific.sql ``` --- #### 4. 注意事项 1. **权限验证**:确保用户具有远程连接权限(可通过 `GRANT` 命令配置)[^2]。 2. **网络连通性**:需确认本地主机与远程 MySQL 服务器的网络可达。 3. **备份一致性**:建议配合 `--single-transaction` 参数实现事务一致性备份。 4. **安全提示**:避免在命令行中直接暴露密码(如 `-p123` 不安全,建议交互式输入)。 --- #### 5. 扩展用法示例 ```bash # 带压缩的远程备份(使用 gzip) mysqldump -h remote-db.example.com -u root -p --single-transaction mydb | gzip > /backup/mydb_$(date +%F).sql.gz ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值