gpt4 book ai didi

mysql - 如何调用此 shell 脚本将 mysqldump 转换为 SQLite 兼容语法

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:53 26 4
gpt4 key购买 nike

我需要自动将 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com