- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要自动将 mysqldump 文件(.sql 文件)转换为与 SQLite 兼容的 .sql 文件。我找到了这个 script在 github 上应该可以做到这一点。如果我有一个来自 MySQL 的名为 test.sql 的未修改的 .sql 文件,其数据库名称为 test 并且目录中有脚本 mysql2sqlite.sh,我将如何调用它。
脚本在注释中说明了如何调用它。我相信我的场景符合第一个标题为 usage 的场景,因为我已经有了 mysqldump 文件。
# Usage: $ ./mysql2sqlite mysqldump-opts db-name | sqlite3 database.sqlite
# Example: $ ./mysql2sqlite --no-data -u root -pMySecretPassWord myDbase | sqlite3 database.sqlite
我在 github 页面上的评论中阅读了使用 chmod +x mysql2sqlite.sh
更改脚本权限的内容,因此导航到包含 sql 和脚本的目录并执行了该操作。然后我尝试了:
pi@raspberrypi ~ $ ./mysql2sqlite.sh test.sql 测试 | sqlite3 数据库.sqlite
失败并出现错误:-bash: ./mysql2sqlite.sh:/bin/sh^M: bad interpreter: No such file or directory
然后我在网上看到要调用一个 .sh 文件,你可以键入 sh myShellFile.sh
所以我尝试了sh mysql2sqlite.sh test.sql test | sqlite3 数据库.sqlite
然后回来了:
: not founde.sh: 2: mysql2sqlite.sh:
: not founde.sh: 5: mysql2sqlite.sh:
: not founde.sh: 8: mysql2sqlite.sh:
: not founde.sh: 11: mysql2sqlite.sh:
: not founde.sh: 13: mysql2sqlite.sh:
: not founde.sh: 14: mysql2sqlite.sh:
mysqldump: Got error: 1045: Access denied for user 'pi'@'localhost' (using password: NO) when trying to connect
: not founde.sh: 15: mysql2sqlite.sh:
它似乎在尝试连接到服务器,而不是读取我提供的 mysqldump 文件。调用此脚本的正确方法是什么。我有一些使用 Linux 的经验,但没有使用 unix shell 的经验。
阅读我的problem的背景可能会有一些用处。
编辑:编辑脚本的第一行后再次运行会产生错误 Error: near line 4: near "Insert": syntax error
这是我要处理的 sqldump:
-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Feb 28, 2015 at 06:00 AM
-- Server version: 5.6.17
-- PHP Version: 5.5.12
SET time_zone = "+00:00";
/*!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 */;
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `testtable`
--
CREATE TABLE IF NOT EXISTS `testtable` (
`FirstName` varchar(30) NOT NULL,
`LastName` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `testtable`
--
INSERT INTO `testtable` (`FirstName`, `LastName`) VALUES
('', ''),
('Josh', 'Kallus'),
('', ''),
('Josh', 'Kallus');
/*!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 */;
最佳答案
您误解了脚本中的注释。该脚本需要 mysql 转储选项,后跟 dbname(不是转储文件)。如果您查看第一行代码,您就会明白它是如何工作的。
mysqldump --compatible=ansi --default-character-set=utf8 --compatible=ansi --skip-extended-insert --compact "$@" | \
脚本期望输出的 MySQL 数据使用它也传递的参数,因此最好的方法可能是按预期使用脚本。
mysql2sqlite.sh -h my.host.com --single-transaction -umyuser -p mydb | sqlite3 database.sqlite
如果您只能从现有的转储文件中执行此操作,那么您可以将代码中的第一个 mysqldump 行更改为此
cat $@ | \
那么你可以这样做
mysql2sqlite.sh test.sql | sqlite3 database.sqlite
请记住,此脚本不是 Elixir ,您可能会遇到其他不兼容问题。您可以通过直接编辑转储文件本身来解决这些问题。祝你好运。
http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html
编辑:正如我最初所说,这个脚本不是 Elixir ,您可能必须编辑您的转储才能使其正常工作(最好的兼容性来自使用它内置的转储功能)我已经将您的脚本编辑为您想要的见下文,它应该工作。
-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Feb 28, 2015 at 06:00 AM
-- Server version: 5.6.17
-- PHP Version: 5.5.12
SET time_zone = "+00:00";
/*!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 */;
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `testtable`
--
CREATE TABLE IF NOT EXISTS `testtable` (
`FirstName` varchar(30) NOT NULL,
`LastName` varchar(30) NOT NULL
);
--
-- Dumping data for table `testtable`
--
INSERT INTO `testtable` (`FirstName`, `LastName`) VALUES('', ''),('Josh', 'Kallus'),('', ''),('Josh', 'Kallus');
/*!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 */;
关于mysql - 如何调用此 shell 脚本将 mysqldump 转换为 SQLite 兼容语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28787756/
我定期针对 Drupal 数据库运行 mysqldump,伙计,那些缓存表可能会变得很大。考虑到我在重新加载数据后做的第一件事就是清除缓存,如果我可以完全跳过转储所有这些行,我会很高兴。我不想跳过表创
我知道 exit code = 0 的意思是 No error。 我得到 退出代码 = 2。这是什么意思 ? 在哪里可以看到 mysqldump 退出代码的完整列表? 最佳答案 取自 MySQL 5.
我正在清理这个庞大而困惑的数据库。它包含 500 多个表,这是将 Magento Enterprise 与 Joomla 结合到一个数据库中的结果。 更糟糕的是,有一组 70 多个 Joomla 表根
我正在尝试将大型数据库中的一小部分记录加载到测试数据库中。 你如何告诉 mysqldump 只给你 800 万条记录中的 n 条记录? 谢谢 最佳答案 正如 skaffman 所说,使用 --wher
我的 mysqldump 有问题.. 我知道如何从我的电脑启动 mysqldump 命令到远程服务器并自动将 mysqldump 文件保存在我的电脑中...... mysqldump --user=
这是我的完整 bash 脚本: #!/bin/bash logs="$HOME/sitedb_backups/log" mysql_user="user" mysql_password="pass"
在这个问题上工作了一整天..当我请求该表时,它为我提供了整个数据库.. #!/bin/bash # mysqldump --user root --password=mypw sellnjho_rea
我想知道通过phpmyadmin导出大型数据库和通过mysqldump通过终端导出信息的方式是否有区别。 mysqldump 的运行时间更好? 我想知道优点和缺点。 谢谢。 最佳答案 如果你从 mys
我收到以下错误: mysqldump: [ERROR] unknown variable 'database=myDB1' 当我运行这个命令时: mysqldump -u root -p myDB
我最近将服务器升级到 Debian 9,并将 MySQL 升级到最新版本。我有一个简单的备份脚本,在生产站点上执行任何工作之前运行该脚本,但这一次,在运行脚本时,我遇到以下情况: mysqldump:
解决方法见底 我正在运行 mysqldump 作为通过 cron 作业调用的 php 脚本的一部分。 是否可以从 mysqldump 命令返回 stderr,或者将其分配给可以直接读取的变量?或者是否
尝试通过 MySQL Workbench 转储简单数据库,方法是单击...服务器>数据导出>mydb>开始导出 获取消息:mysqldump 版本不匹配...消息显示这些版本mysqldump.exe
我尝试了其他答案中提到的其他解决方案,例如权限、授予问题、端口号、密码/用户名等。这些都不是问题;它们可能是您的问题,因此需要检查。 配置:在 Win10 上运行 Wordpress,安装了 Mari
我必须从服务器转储数据库,将 .sql 传输到另一台服务器,然后运行以下脚本以使用此语法删除某些行: DELETE wp_posts FROM wp_posts INNER JOIN wp_postm
正在尝试从 MAMP 服务器导出数据库。我试过命令: # mysql_dump -u root -proot db_name > db_name.sql # Applications/MAMP/Lib
我只想转储最新的行。但是当我通过 --where 选项时,它不会转储行。但是当我使用相同的 where 子句执行选择查询时,它返回行。这是我的选择查询: SELECT * FROM abc.`xyz
我用它来将所有数据从 my_database 导出到分隔文本到一个文件夹中 mysqldump -u root -p -t -T /path/to/export my_database --field
我经常使用以下命令通过 ssh 在 AWS RDS 上导出 mySql 数据库: mysqldump -u myUserName -h myDBname.randomcharacters.us-reg
我需要包含数据的 mysqldump,但在数据库中还有几个带有 FEDERATED 引擎的表。 mysqldump 也包括 FEDERATED 表的 INSERT,这是导致“重复条目”错误的原因(因为
mysqldump 在生成转储文件时会转义哪些字符?不幸的是,我找不到任何相关文档,所以我尝试了一下,发现只有双引号、单引号和反斜杠 (',",\) 会被反斜杠转义。 但是还有更多吗,或者有任何可用的
我是一名优秀的程序员,十分优秀!