我使用mysqldump导出数据库,如下所示:
mysqldump -u root -ppassword my_database > c:\temp\my_database.sql
Run Code Online (Sandbox Code Playgroud)
不知何故,它只导出一个表.有什么我做错了吗?
我是MySQL的新手,我在Windows上运行它.我试图从MySQL中的转储文件恢复数据库,但我收到以下错误:
$ >mysql -u root -p -h localhost -D database -o < dump.sql
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: 'SQLite format 3'.
Run Code Online (Sandbox Code Playgroud)
我试过放入--binary-mode
ini文件,但它仍然给出了同样的错误.我该怎么办?请帮忙.
UPDATE
正如尼克在他的评论中所建议的那样,我试过$ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sql
但它给了我以下ERROR at line 1: Unknown command '\?'.
它是一个500 Mb转储文件,当我使用gVIM查看其内容时,我所能看到的只是表达式和数据,这是不可理解的.
是否可以从--all-databases mysqldump导入单个数据库?我想我可以手动修改文件,但想知道是否有任何命令行选项来执行此操作.
我正在移动服务器并拥有大量数据库,其中大部分目前我不需要或者想要,但是如果需要的话,我希望可以选择恢复单个数据库.
我想将每个mysql表转储到单独的文件中.手册指出了这个的语法
mysqldump [options] db_name [tbl_name ...]
Run Code Online (Sandbox Code Playgroud)
这表示您事先知道了表名.我现在可以设置知道每个表名的脚本,但是说我在路上添加一个新表并忘记更新转储脚本.然后我错过了一个或多个表的转储.
有没有办法将每个现有表自动转储到单独的文件中?或者我将不得不做一些剧本; 查询数据库,获取所有表名,并按名称转储它们.
如果我使用script-fu路由,哪些脚本语言可以访问mysql数据库?
我在crontab
上班途中遇到了问题.我想自动化MySQL数据库备份.
设置:
从shell开始,这个命令有效
mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz
Run Code Online (Sandbox Code Playgroud)
当我使用crontab -e将它放在crontab中时
* * /usr/bin/mysqldump -u user -pupasswd mydatabase | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
在/ home/user/backup目录中每分钟创建一个文件,但是有0个字节.
但是,当我将此输出重定向到第二个目录backup2时,我注意到在其中创建了正确压缩的正确mysqldump文件.我无法确定我在第一个目录中的0字节文件和第二个目录中的预期输出导致的错误是什么.
* * /usr/bin/mysqldump -u user -pupasswd my-database | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1
Run Code Online (Sandbox Code Playgroud)
我非常感谢你的解释.
谢谢
如何指示mysqldump使用insert语句中的列名进行备份?
在我的情况下,我没有正常的备份与插入sql的结果
LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users`
INSERT INTO `users` VALUES (1
Run Code Online (Sandbox Code Playgroud)
结构体.
现在我继续从用户的架构中删除了一列.在此之后,当我运行备份sql时,我得到列号不匹配错误.
要解决此问题,我如何指示mysqldump也写入列名?我现在就是这样做的
mysqldump --host=${dbserver} --user=${dbusername} --password=${dbpassword} \
--no-create-db --no-create-info --extended-insert --single-transaction \
--compress tablename
Run Code Online (Sandbox Code Playgroud)
在更广泛的层面上,管理这些架构更改的最佳做法是什么?
我在cron作业中使用mysqldump来备份超过200万行的数据库.
它创建一个文本文件,可用于从命令行恢复数据记录.
我认为在恢复之前编辑转储作为一种更改值和表或列名称的快速方法会很有用- 至少在我了解更多信息并对使用ALTER和UPDATE执行此操作充满信心之前.
编辑大型文本文件并不会让我感到烦恼,但我惊讶地发现,在250兆字节的数据库转储中,只有大约300行.每行都有800k字符长.
是否有另一种生成转储的方法,可以更好地控制线路长度?
或者我应该使用sed或Perl等工具对转储进行后处理?
虽然做一个MySQL转储很容易,但我有一个实时专用的MySQL服务器,我想设置复制.为此,我需要转储数据库以导入到我的复制从站.
问题发生在我进行转储时,MySQL会全力以赴,并将资源绑定到连接它的站点.我想知道是否有办法将转储查询限制为低优先级状态,优先级为实时连接?这个想法是来自外部站点的负载不受MySQL进行完全转储的努力的影响......
所以我只能导出这样一个表:
mysqldump -u root -p db_name table_name > table_name.sql
Run Code Online (Sandbox Code Playgroud)
有没有办法只使用mysqldump导出表的一部分?例如,0 - 1,000,000行,1,000,000 - 2,000,000行等.
我应该使用mysqldump还是查询?