我从Windows命令行运行以下命令来备份我的数据库:
...\right_path\mysqldump --add-drop-database --databases my_database_name
--defaults-extra-file=d:\1.cnf
Run Code Online (Sandbox Code Playgroud)
其中d:\1.cnf包含以下内容:
[client]
user="my_user"
password="my_password"
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误消息:
mysqldump: unknown variable 'defaults-extra-file=d:\1.cnf'
Run Code Online (Sandbox Code Playgroud)
如果我做:
...\right_path\mysqldump --add-drop-database --databases my_database_name
--user="my_user" --password="my_password"
Run Code Online (Sandbox Code Playgroud)
它按预期工作.
我究竟做错了什么 ?
我的应用程序下载邮件通过IMAP并将它们存储在MySQL数据库中.早些时候我支持的邮件大小高达10 MB,因此用于存储邮件内容的"中等文本"列就足够了.现在我需要支持高达30MB的邮件.所以我将列的数据类型更改为'largetext'.昨天存储了一个大小为25 MB的邮件.之后,每当我执行mysqldump命令时,它都会抛出错误:
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `ib_mailbox_backup` at row: 3369
行3369包含25 MB邮件.
在MySQL配置中,我将'max_allowed_packet'从64M增加到512M,它仍然失败并出现相同的错误.在运行MySQL服务器的同一台机器上执行mysqldump命令.我该如何解决这个问题?
我正在将文件移动到另一台计算机上,我想做的一件事就是在MySQL数据库中传输数据.我想将数据库转储到.sql文件中,但是还要在文件中包含create database db_name,这样我只需要将文件导入mysql而无需手动创建数据库.有没有办法做到这一点?
我写了一个脚本来备份我的MySQL数据库:
mysqldump --opt --all-databases -u user -pmypassword > myDump.sql
Run Code Online (Sandbox Code Playgroud)
cron每晚都会启动它并将结果scp到另一台服务器.
mypassword在我的脚本中清晰显示,每个人都可以使用适当的权限查看它.我也被告知/ proc问题(可以看到cmd运行的地方).
MySQL文档说:
在命令行上指定密码应该被认为是不安全的.请参见第7.6节"保持密码安全".
我没有在任何地方找到这个神奇的7.6节.
处理自动mysqldump和密码安全性的好习惯是什么?
如何使用mysqldump完成mysql数据库的完整备份?当我进行备份时,我的指定数据库中的表只会被备份.程序和功能不是.
这是我正在使用的备份命令:(
操作系统是Windows Vista.)
mysqldump -u username -p db1 > backup.sql
Run Code Online (Sandbox Code Playgroud) 我在拥有120个表的服务器上有数据库.
我想用新的数据库名称和复制的数据克隆整个数据库.
有没有一种有效的方法来做到这一点?
这已被问过几次,但我无法找到解决问题的方法.基本上当使用mysqldump(MySQL Workbench管理工具的内置工具)时,当我使用扩展插入转储数据库时,我会获得大量的长行数据.我明白为什么会这样做,因为它通过将数据作为一个命令(特别是在InnoDB上)插入来加速插入,但格式化使得真正难以实际查看转储文件中的数据,或者使用diff工具比较两个文件如果你将它们存储在版本控制等等.在我的情况下,我将它们存储在版本控制中,因为我们使用转储文件来跟踪我们的集成测试数据库.
现在我知道我可以关闭扩展插入,所以每行会有一个插入,这是有效的,但是每次使用转储文件进行恢复时它都会变慢.
我的核心问题是,在我转储文件时我们曾经使用过的OLD工具(MySQL管理员),它基本上做了同样的事情,但是它的格式是INSERT语句每行放一个插入,同时仍然进行批量插入.所以不是这样的:
INSERT INTO `coupon_gv_customer` (`customer_id`,`amount`) VALUES (887,'0.0000'),191607,'1.0300');
Run Code Online (Sandbox Code Playgroud)
你得到这个:
INSERT INTO `coupon_gv_customer` (`customer_id`,`amount`) VALUES
(887,'0.0000'),
(191607,'1.0300');
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么选项,似乎没有任何方法可以获得这样的转储,这真的是两全其美.是的,它需要更多的空间,但在需要人来阅读文件的情况下,它会使它变得更有用.
我错过了什么,有一种方法可以使用MySQLDump,或者我们都倒退了,旧的(现已弃用的)MySQL管理员工具中的这个功能不再可用?
当我在我的数据库上运行mysqldump命令然后尝试导入它时,它会失败,因为它尝试按字母顺序创建表,即使它们可能有一个外键在文件后面引用一个表.似乎没有成为任何东西的文档,我已经找到答案,像这样是说,它的创建后,包括更新文件:
set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;
Run Code Online (Sandbox Code Playgroud)
有没有办法自动设置这些行或以必要的顺序导出表(不必手动指定所有表名,因为这可能是单调乏味且容易出错)?我可以将这些行包装在脚本中,但是想知道是否有一种简单的方法可以确保我可以转储文件然后导入它而无需手动更新它.
我试图从我的MySQL数据库创建一个转储文件,但是当我尝试它总是给我这个错误
exitcode 2操作失败
16:06:07 Dumping proactivetraindb (userstate)
Running: mysqldump.exe --defaults-extra-file="h:\docume~1\anarita\locals~1\temp\tmpde5rwy.cnf" --user=root --max_allowed_packet=1G --host=localhost --port=3306 --default-character-set=utf8 "proactivetraindb" "userstate"
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)
Run Code Online (Sandbox Code Playgroud)
MySQl的版本是5.6.10,但MySQLDump的版本是5.5.16
有人知道如何解决这个问题吗?
我有一个现有的MySQL实例(测试),包含2个数据库和一些用户,每个用户对每个数据库具有不同的访问权限.
我现在需要复制其中一个数据库(进入生产)和与之关联的用户.
复制数据库很简单:
出口:
mysqldump --no-data --tables -u root -p secondb >> secondb_schema.sql
Run Code Online (Sandbox Code Playgroud)
进口:
mysql -u root -p -h localhost secondb < secondb_schema.sql
Run Code Online (Sandbox Code Playgroud)
我没有找到,但是,导出和导入一个简单的方法的用户,在命令行(内部或外部的MySQL).
如何从命令行导出和导入用户?
更新:到目前为止,我已经找到了完成此操作的手动(因此容易出错)的步骤:
-- lists all users
select user,host from mysql.user;
Run Code Online (Sandbox Code Playgroud)
然后找到它的补助金:
-- find privilege granted to a particular user
show grants for 'root'@'localhost';
Run Code Online (Sandbox Code Playgroud)
然后使用上面"show grants"命令的结果中列出的授权手动创建用户.
我更喜欢更安全,更自动化的方式.有吗?
mysql ×10
mysqldump ×10
backup ×2
database ×2
complete ×1
data-import ×1
dump ×1
foreign-keys ×1
security ×1
windows ×1