Category: MySQL / Mariadb

MySQL 語法 – INSERT … ON DUPLICATE KEY UPDATE

有時在 MySQL 新增資料時, 會先判斷資料是否存在, 如果資料不存在會執行 INSERT 語句, 如果資料存在則用 UPDATE 語句。以前要這樣做, 需要先用 SELECT 判斷, 就像這樣:雖然可以完成上面提到的任務, 但寫程式時就會較麻煩, MySQL 提供了 INSERT … ON DUPLICATE KEY UPDATE 語句, 可以一行就完成, 無需用 IF 及 SELECT, 寫法是這樣:要用上面的 …

同時運行多個 MySQL

有時需要在不同 MySQL 版本間做測試, 如果要在伺服器內重啟 MySQL 切換版本做測試會很麻煩, 以下紀錄一下在伺服器內安裝兩個 MySQL 同時運行, 當然如果有需要, 也可以按此方法安裝 2 個以上的 MySQL。以下假設第一個 MySQL Server 已經正常運作, 下面全是安裝第二個 MySQL Server 的步驟:1. 建立 MySQL 資料庫目錄: # mkdir /var/lib/mysql2 # chown mysql.mysql …

變更 MySQL 預設埠號

MySQL 的預設埠號是 3306, 要變更埠號可以有很多原因, 例如基於安全考量或者同時安全兩個 MySQL Server 等, 以下是變更埠號的方法:1. 開啟 my.cnf 檔案, Redhat 及 CentOS 開 /etc/my.cnf, Debian 放在 /etc/mysql/my.cnf。 加入以下這行到 段落, 如果已經有 port 的選項, 直接修改便可以, 下面會將埠號改為 3307:port = …

MySQL 找出重複資料

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

[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.000005MySQL 在預設情況下不會刪除舊 binary log, 可以透過設定 my.cnf 進行日誌輪替, 開啟 my.cnf, 加入這一行在 區塊內: expire_logs_days = 14expire_logs_days 是指定 binary log 保留的時間, 上面這行是設定保留 …

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 一樣簡單, 以下是使用例子: