跳转到内容

MySQL/数据库操作

来自维基教科书,开放的书籍,开放的世界
 CREATE DATABASE database;

需要?权限。

mysqladmin create 是此函数的命令行包装器。

注意:在 MySQL 中,CREATE SCHEMACREATE DATABASE 的完美同义词,与其他一些数据库管理系统(如 Oracle 或 SQL Server)不同。

 DROP DATABASE database;

需要?权限。

mysqladmin drop 是此函数的命令行包装器。-f 选项可用于抑制交互式确认(对无人值守脚本有用)。

重命名

[编辑 | 编辑源代码]

在某些 5.1.x 版本中,有一个 RENAME DATABASE db1 TO db2; 命令,但它已被删除,因为通过 SQL 重命名数据库会导致一些数据丢失问题[1]

但是,在命令行中,您可以创建/导出/导入/删除

 mysqladmin create name2
 mysqldump --opt name1 | mysql name2
 mysqladmin drop -f name1

另一个选项是,如果您有 root 权限,可以重命名数据库目录

 cd /var/lib/mysql/
 /etc/init.d/mysql stop
 mv name1/ name2/
 /etc/init.d/mysql start

您还需要删除 name1 上的权限并在 name2 上重新创建它们

 UPDATE mysql.db SET `Db`='name2' WHERE `Db`='name1';
 FLUSH PRIVILEGES;

MySQL 中没有直接的复制命令。但是,这可以使用一些工具轻松完成。

使用 mysqldump

[编辑 | 编辑源代码]

mysqldump 命令行可用于生成数据库的完整平面文件副本。然后,您可以在另一个数据库中重新注入此副本。

这需要直接访问数据库;如果您没有,则可能需要使用 phpMyAdmin 代替。

# First, clean-up the target database:
 mysqladmin drop -f base2
 mysqladmin create base2
# Copy base1 to base2:
 mysqldump --opt base1 | mysql base2

要在每天午夜自动备份[2],在 Linux 中

 $ crontab -e
0 0 * * * /usr/local/bin/mysqldump -uLOGIN -PPORT -hHOST -pPASS base1 | gzip -c > `date “+\%Y-\%m-\%d”`.gz

使用 phpMyAdmin

[编辑 | 编辑源代码]


  • 使用 Linux
mysql -h localhost -u root MaBase < MaBase.sql
  • 在 Windows 中,程序可能不在环境变量中
"C:\Program Files (x86)\EasyPHP\binaries\mysql\bin\mysql.exe" -h localhost -u root MyDB < MyDB.sql

与 PhpMyAdmin 导入相反,没有限制。例如,我们可以用五分钟的时间加载一个 2 GB 的数据库。


从其他数据库迁移

[编辑 | 编辑源代码]

工具:MySQL 迁移工具包

数据建模工具

[编辑 | 编辑源代码]
  • MySQL 查询浏览器显然包含一个 MySQL 表编辑器 模块。
  • Kexi(维基百科:Kexi


DB Designer 4 和 MySQL Workbench

[编辑 | 编辑源代码]

DBDesigner 开始变得老旧。它在 GNU GPL 下发布,但不能完全被认为是自由软件,因为它需要非自由的 Kylix 编译器来构建。

但 MySQL AB 收购了 fabFORCE[需要引用][3],它分发了 DB Designer,而 MySQL Workbench 是下一个版本。目前该项目仍处于 Alpha 阶段,尚未准备好使用。

同时,如果您使用 DBDesigner 的最新版本,您会发现它无法连接到 MySQL,并出现“无法加载 libmysqlclient.so”错误。为了解决这个问题,

sudo ln -sf /usr/lib/libmysqlclient.so.10 /usr/lib/DBDesigner4/libmysqlclient.so
  • 查找并安装 kylixlibs3-unwind-3.0-rh.4.i386.rpm
  • 找到一个旧的 xorg(例如 xorg-x11-libs-6.8.2-37.FC4.49.2.1.i386.rpm 来自 FC4)并提取它
rpm2cpio x.rpm | cpio -i
  • 获取该包中的 libXft.so.1.1 并安装它
sudo cp libXft.so.1.1 /usr/lib
ldconfig

现在您可以从 DBDesigner4 连接到您的 MySQL5 服务器。将此视为等待社区(免费)和商业(非免费)版本 MySQL Workbench 的临时解决方案。

OpenOffice Base 和 ODBC

[编辑 | 编辑源代码]

典型配置

  • 主机上的 MySQL 数据库(其名称在下面为 mysqlhost
  • 客户端机器上的 OOo 2(例如 Debian GNU/Linux)
  • 通过 ODBC 连接。

这是一个客户端配置:我们需要 mysql-client

aptitude install mysql-client

在 Fedora/CentOS 下

yum install mysql

在安装 ODBC 之前,我们可以本地测试远程连接

$ mysql -h mysqlhost -u user1 mysqldatabase -p
Enter password: PassUser1

您必须在 mysqlhost 上创建数据库 mysqldatabase 和用户 user1。似乎没有问题(希望没有;-))

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33 to server version: 5.0.24a-Debian_5~bpo.1-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

然后,可以通过不同的查询进行测试

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysqldatabase      |
+--------------------+
2 rows in set (0.00 sec)
....
mysql> quit;
Bye

很好!让我们在客户端机器上使用 OOo 和 ODBC

aptitude install libmyodbc unixodbc

对于 Fedora/CentOS

yum install mysql-connector-odbc unixODBC

创建了 /etc/odbc.ini(空文件)和 /etc/odbcinst.iniodbcinst.ini声明了可用的ODBC驱动程序。以下是MySQL语句(.so文件路径可能因发行版而异);对于Debian

[MySQL]
Description     = MySQL driver
Driver          = /usr/lib/odbc/libmyodbc.so
Setup           = /usr/lib/odbc/libodbcmyS.so
CPTimeout       =
CPReuse         =
FileUsage       = 1

对于CentOS

[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc3.so
Setup           = /usr/lib/libodbcmyS.so
FileUsage       = 1


现在我们可以使用 odbcinst 

# odbcinst -j
unixODBC 2.2.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini

更多选项: man odbcinst

首先,我们必须至少创建一个DSN(数据源名称或数据集名称),因为每个ODBC连接都是通过现有的DSN初始化的。这在所有情况下都是正确的,因此它是OOo的ODBC连接所必需的。

要创建DSN,有不同的方法 

  • 修改/etc/odbc.ini(影响所有用户)
  • 修改~/.odbc.ini(影响特定用户)
  • 使用图形应用程序,例如ODBCConfig(Debian:unixodbc-bin,Fedora:unixODBC-kde)。最后,这些图形应用程序会修改/etc/odbc.ini~/.odbc.ini

例如,一个/etc/odbc.ini文件(DSN的名称在方括号[]之间)

[MySQL-test]
Description     =       MySQL ODBC Database
TraceFile       =       stderr
Driver          =       MySQL
SERVER          =       mysqlhost
USER            =       user1
PASSWORD        =
DATABASE        =       mysqldatabase

在这种情况下,DSN称为MySQL-test

然后我们可以使用isql命令进行测试

$ isql -v MySQL-test user1 PassUser1
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-------------------+
| Database          |
+-------------------+
| information_schema|
| mysqldatabase     |
+-------------------+
2 rows affected
2 rows returned
SQL> quit;

现在,从OOo

-> File
 -> New
  -> Database
-> Connecting to an existing database
 -> MySQL
   -> Next
-> Connect using ODBC
 -> Next
-> Choosing a Data Source
 -> MySQL-test
  -> Next
-> Username : user1 (tick password required)
-> Yes, register the database for me
-> Finish

在这个步骤中,我们连接到mysqldatabase数据库,以用户user1身份。在访问数据库之前,例如创建表时,我们将提供user1密码。然后,通过OOo,现在可以非常容易地访问和操作数据库。我们只需注意到以下情况下需要Java 

  • 用于创建表单的向导(相反,直接创建表单不需要任何JRE)。
  • 用于创建报表的向导。
  • 用于创建查询的向导(相反,直接创建查询或通过视图创建查询不需要任何JRE)。
  • 用于创建表的向导(相反,直接创建表或创建视图不需要任何JRE)。

GNU/Linux发行版通常将OpenOffice与IcedTea(openjdk-6-jre/java-1.6.0-openjdk)或GCJ(java-gcj-compat/java-1.4.2-gcj-compat)一起发布,以便这些基于Java的功能正常工作。

参考资料

[edit | edit source]
  1. https://dev.mysqlserver.cn/doc/refman/5.1/en/rename-database.html
  2. http://stackoverflow.com/questions/6645818/how-to-automate-database-backup-using-phpmyadmin
  3. 在论坛中:[1],但我们需要更官方的内容
华夏公益教科书