跳轉到內容

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.mysql.com.tw/doc/refman/5.1/en/rename-database.html
  2. http://stackoverflow.com/questions/6645818/how-to-automate-database-backup-using-phpmyadmin
  3. 在論壇中:[1],但我們需要更官方的內容
華夏公益教科書