【发布时间】:2015-02-28 22:32:22
【问题描述】:
我需要自动将 mysqldump 文件(.sql 文件)转换为 SQLite 兼容的 .sql 文件。我在 github 上找到了这个 script,它应该能够做到这一点。如果我有一个来自 MySQL 的名为 test.sql 的未经修改的 .sql 文件,其数据库名称为 test 并且脚本 mysql2sqlite.sh 在一个目录中,我将如何调用它。
脚本在 cmets 中说明了如何调用它。我相信我的场景与第一个名为 usage 的场景相匹配,因为我已经有了 mysqldump 文件。
# Usage: $ ./mysql2sqlite mysqldump-opts db-name | sqlite3 database.sqlite
# Example: $ ./mysql2sqlite --no-data -u root -pMySecretPassWord myDbase | sqlite3 database.sqlite
我在 github 页面上阅读了 cmets 以使用 chmod +x mysql2sqlite.sh 更改脚本权限,因此导航到带有 sql 和脚本的目录并做到了。
然后我尝试了:
pi@raspberrypi ~ $ ./mysql2sqlite.sh test.sql test | sqlite3 database.sqlite
失败并出现错误:-bash: ./mysql2sqlite.sh: /bin/sh^M: bad interpreter: No such file or directory
然后我在网上阅读到调用您键入sh myShellFile.sh 的 .sh 文件
所以我尝试了sh mysql2sqlite.sh test.sql test | sqlite3 database.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 */;
【问题讨论】:
-
/bin/sh^M:您的脚本有 Windows 行结尾 (/r/n)。第一行 (shebang) 说明应该使用哪个程序来运行脚本。在sed -i 's/^M//' mysql2sqlite之后效果更好(你应该输入 ^M 作为 ctrl-v ctrl-m),或者你可以用 dos2unix 或编辑器删除 ^M 吗? -
Notepad++有换行符,我试试
-
之后我用这个输出再次运行它:` mysqldump: Got error: 1045: Access denied for user 'pi'@'localhost' (using password: NO) when trying to connect memory`
标签: mysql linux bash sqlite shell