我愛大自然: 魯肉飯之大數據 - 這是一個圍繞著「大」的故事
以下我要寫的文章,其實不是我愛寫的文章類型,因為這種文章的邏輯不通,而且對科技界一點貢獻也沒有。再者我也不喜歡吃魯肉飯,這篇算是比較沒有營養的文章,大家可以當作笑話看看就好。不過我還是有些「大數據」的觀念想跟大家分享。
以下我要寫的文章,其實不是我愛寫的文章類型,因為這種文章的邏輯不通,而且對科技界一點貢獻也沒有。再者我也不喜歡吃魯肉飯,這篇算是比較沒有營養的文章,大家可以當作笑話看看就好。不過我還是有些「大數據」的觀念想跟大家分享。
1. 備份單一資料庫:
$ mysqldump -u Username -p --opt DatabaseName > Backup.sql
2. 僅備份特定資料庫下的資料表:
$ mysqldump -u Username -p --opt DatabaseName Table1 Table2... > Backup.sql
3. 僅匯出資料表結構:
$ mysqldump -u Username -p --opt --no-data DatabaseName > Backup.sql
4. 備份全部的資料庫:
$ mysqldump -u Username -p -A --opt > AllBackup.sql
1. 建立資料庫,再從備份檔匯入單一資料庫:
$ mysqladmin -u Username -p create DatabaseName
$ mysql -u Username -p DatabaseName < Backup.sql
2. 從備份檔匯入全部的資料庫 (不需先建立資料庫):
$ mysql -u Username -p < AllBackup.sql
狀況 1.
匯入資料庫時出現錯誤訊息: Unknown collation: 'utf8mb4_unicode_ci' 或 Unknown collation: 'utf8mb4_unicode_520_ci'
說明:
MySQL 於 v5.5.3 版之後才有「utf8mb4」的編碼格式。原本 utf8 的最大編碼長度為 3bytes,而 utf8mb4 的最大編碼長度為 4bytes,因此它比 utf8 可以儲存更多的字元。但是以常用的文字來講,utf8 已經完全足夠使用了。若不昇級 MySQL Server,則只須將匯入的字元編碼格式改為原本的 utf8。
解決方法:
先將備份檔中的 utf8mb4 字串替換成 utf8: (以下的三行指令需依照順序執行)
$ sed -i 's/utf8mb4_unicode_ci/utf8_general_ci/g' Backup.sql $ sed -i 's/utf8mb4_unicode_520_ci/utf8_general_ci/g' Backup.sql $ sed -i 's/utf8mb4/utf8/g' Backup.sql
全部替換完再進行匯入:
$ mysql -u Username -p DatabaseName < Backup.sql
狀況 2.
以 mysqldump 匯出資料庫時出現錯誤訊息: Got error: 1044: Access denied for user 'backup'@'localhost' to database 'test' when using LOCK TABLES
說明:
這錯誤訊息已說明了用來執行 mysqldump 的帳號沒有「LOCK TABLES」權限! 通常用 root 帳號匯出資料庫不會發生這個問題,因為我們會給 root 所有的權限。然而我們在設定其它帳號時可能會忘了給它設定「LOCK TABLES」權限,而執行 mysqldump 至少需要「SELECT」與「LOCK TABLES」權限才行,最好再加上「SHOW VIEW」、「EVENT」與「TRIGGER」。
解決方法:
重新授予用戶權限:
grant SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER on *.* to 'backup'@'localhost' identified by '{Password}';
flush privileges;
狀況 3.
從 cpanel 下載的 MySQL 檔案格式為 *.gz,可以用 gunzip 解壓縮:
$ gunzip Backup.sql.gz
注意: 使用 gunzip 解壓縮後,原本的 *.gz 會被刪除!!若要保留舊檔,須改用下列指令:
$ gunzip -c Backup.sql.gz > Backup.sql
MySQL 的資料庫放在 /var/lib/mysql 下,以資料庫的名稱做為目錄的名稱。直接將 /var/lib/mysql 下的資料庫目錄用 tar 指令個別壓縮起來即可做為備份。要還原再把檔案解壓縮回去。
要以這種方式執行備份與還原都必須先停止 MySQL 的服務:
$ service mysqld stop
這是我在 Facebook 上看到的安全資訊,我覺得很重要,也適用在任何的網站套件上。
以 WordPress 為例,首先,請查看你的 WordPress 目錄下是否有這些檔案:
|
|
今天被一個 Bug 困住好久,可能是之前自己的手誤造成!!
原因就是...MySQL 的欄位名稱竟然可以使用空白字元,而且還可以放在第一個字元,我真是學藝不精!!
經測試,連資料表的名稱也可以使用空白字元:
CREATE TABLE ` test table` ( ` field 1` TINYINT NOT NULL , PRIMARY KEY ( ` field 1` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
上面看得出我在資料表與欄位的名稱都用了空白字元嗎? 而且還是放在第一個字元!
我想,如果想要陷害別人絕對可以用 MySQL 這一招。
至於處理空白欄位名稱的問題,你可以:
因為我在寫程式所用的到的 MySQL,同時有 3.x 版及 5.x 版要處理,所以對 MySQL 的字元編碼問題需要特別做研究,研究了一陣子之後,終於有了一些初步的心得,列出舊版及新版的 MySQL 做為比較:
Read more
phpMyAdmin 應該是大家最常用的 MySQL 資料庫管理套件,如果要修改它的預設值,請編輯 phpMyAdmin 目錄下的 「config.inc.php」,以下列出一些我建議修改的參數:
Read more
Cheat Sheet Roundup 是一個很棒的網站,內有作業系統、程式設計、資料庫、網頁設計…等 30 餘種相關的資料手冊可供下載(包含一些單頁的 Data Sheet 可以用來貼在自己的座位牆板上),對於設計師與相關資訊人員,都是很好的參考資料,強力推薦。
轉載自: Neo』s Blog
今天大概把幾種常見的資料庫命名方式給整理了一下。
單複數皆有人使用,如 products、product。
美國人命名比較喜歡依照口語習慣來用複數命名,知名的 OpenSource 軟體像 phpBB、OSCommerce、In-Link、pLog 皆是以複數命名。而 Moveable Type 則是少數使用單數名命的軟體,台灣人也是單數命名居多。
使用 MySQL 的 Opensource 軟體比常見整批性的加前綴(Prefix) 在欄位裡面,如 products 表單中的「產品名稱」,可能就會命名為「products_name」而 Microsoft SQL Server 則是以純欄位名稱居多,如產品名稱就直接取叫「name」了。
前綴的命名有「語意導向」跟「實用導向」二種,所謂語意導向以口語的習慣來命名,像 products 是產品的集合(複數),裡面的每個產品是單數,所以用產品名稱為例就是「product_name」。
而實用導向常見的就是以表單名稱做為前綴,如前例在 products 裡的產品名稱欄位就會命名為「products_name」,如此做的好處是程式會非常清楚每個欄位是從哪個表單抓出來的。但是缺點是在程式裡面語意不清,看起來會很不習慣。
然而大部份的欄位前綴字元還是以語意導向為主,若要使用實用導向,最好表單名稱採用單數(如 Moveable Type),否則像 OSCommerce 的全員複數,感覺程式在用名字就很奇怪,如程式明明就是只抓一筆產品名稱出來,看到 products_name 就覺的既不是複數,而且文法上也不通,意義上反而比較像 product』s name。
Microsoft 的命名方式喜歡單字第一個字母大寫,如 OrderDetail。而 MySQL 比較常見全部小寫,單字中間加底線的命名方式,如 order_detal。這跟資料庫的字元大小寫敏感度預設值有關,MS SQL Server 預設是大小寫不分,MySQL 則是大小寫視為不同欄位,所以統一小寫比較不容易出錯。
轉載自: 中文 PHP 資訊站
LAMP 架構的網站,我以前注重的多是安裝/配置方面的,講述開發的相對較少,因為自己從事開發也少。本文的原文當然也來自:
看了以後,頗有啟發,以前開發中遇到的一些問題,迎刃而解。所以翻譯出來和大家共用。
我們解決了什麼問題?我們創造了什麼價值?
近期迴響