Category: MySQL / Mariadb

MySQL 找出重複資料

MySQL 資料庫出現重複資料時, 找出重複資料的方法有很多, 以下介紹兩種常用的方法: 找出重複的紀錄, 以 cid 欄位作為判斷, 會輸出 cutomer_id 及出現次數: SELECT cid, COUNT(*) FROM customer GROUP BY cid HAVING COUNT(*) > 1 不是顯示出現次數, 而是將重複的資料全部輸出: select * from customer where …

[Perl Script] — 自動備份 MySQL

這個 Perl Script 使用 mysqldump 備份 MySQL, 可以放到 crontab 自動執行。 程式需要按需要修改, 以下是需要修改的選項: $db_username: mysql 使用者名稱 $db_password: mysql 密碼 $db_host: mysql server 位置 $mysqldump: mysqldump 位置 $backup_dir: 儲存備份檔的目錄 $rotate: 保留備份數量 @backup_db: …

Redhat / Centos 7 安裝 MariaDB Server

RHEL 7 開始, MariaDB 會取代 MySQL 成為預設的資料庫系統, 以下是安裝方法: yum install mariadb-server mariadb 只要輸入以上指令就可以透過 yum 安裝 mariadb server 及 client, 現在開啟 MariaDB Server: systemctl start mariadb.service 設定開機自動開啟 MariaDB Server: systemctl enable …

MySQL binary log rotate

如果開啟了 MySQL binary log, 在 MySQL 資料目錄裡面會有很多這樣的檔案: mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.000004 mysql-bin.000005 MySQL 在預設情況下不會刪除舊 binary log, 可以透過設定 my.cnf 進行日誌輪替, 開啟 my.cnf, 加入這一行在 區塊內: expire_logs_days = 14 expire_logs_days 是指定 binary …

Perl DBI 防止 SQL Injection

現在很多地方都用上資料庫系統, 有一些是檢查用戶名稱及密碼的登入系統, 但如果沒有對用戶輸入進行過濾, 會有很多潛在危除, 例如以下程式碼: my $sth = $dbh->prepare(“select * from user where user=’$user’ and pass=’$pass'”); 以上這句 SQL 會檢索 user 資料表, 找出 user 及 pass 與用戶輸入匹配的紀錄, 有回傳便可以登入, 沒有回傳便登入失敗, 這個很容易理解。但如果用戶的輸入包括了一些特定的 sql …

Perl 連接 MySQL

在 Perl 要連接資料庫可以使用 DBI module, DBI module 支援多種資料庫系統, 例如 DB2, MS SQL Server, Oracle, SQLite, PostgreSQL, Firebird 及 MySQL。只要在程式宣告使用 DBI module, 用 Perl 連接 MySQL 便會跟 PHP 一樣簡單, 以下是使用例子:

MySQL 資料庫備份及還原

MySQL 的備份可以透過直接複製 MySQL 資料庫目錄(冷備份),或者用 mysqldump 匯出資料庫的完整 SQL 語句實現(熱備份),以下是兩種方法的優/缺點,以及實現方法: 冷備份 這種方法最大的好處是簡單,備份只要直接複製資料庫目錄,還原則只要將備份目錄抄回原來位置便可以,而且速度會較快。但缺點是冷備份時必須要關閉 MySQL,如果 MySQL 在執行時進行冷備份,備份檔可能會有不完整及損毀的情況,以下是冷備份步驟: 1. 關閉 MySQL: # /etc/rc.d/init.d/mysqld stop 2. 把 MySQL 的資料目錄(包括 ibdata1, ib_logfile0, ib_logfile1 等)完整複製到另一個硬碟裡面。 3. 開啟 MySQL: …

MySQL 開啟支援 InnoDB

MySQL 在 5.1 版本開始預設沒有支援 InnoDB, 如果用 yum 安裝的話, Redhat 會處理好 InnoDB 支援, 但如果自行編譯安裝的話, 便需要作出一點改動。以前我編譯 MySQL 會用以下參數編譯: 這樣會安裝 MySQL 到 /usr/local/mysql51, 並安裝所有額外的 charsets, 如果要在 MySQL 5.1 後支援 InnoDB, 需要加入支援 InnoDB …

MySQL 的 Replace 功能

要對 MySQL 資料庫內的資料替換字串,可以借助 PHP 的 str_replace(),但這實在太麻煩了,其實MySQL 已內建了這個功能,以下語句可以將 資料表的 欄位作 replace 動作, 是搜索字串; 是替換字串。 update set =replace(,’‘,’‘); 如果不想將整個資料表的欄位資料更換,可以在最後用 where 做條件選擇,例如: update set =replace(,’‘,’‘) where zip=’852′; 以上語句跟第一句的分別是,第二句只會對欄位 “zip” …