Category: MySQL / Mariadb

CentOS 安裝 MariaDB 10.0

MariaDB 10.0.x 版是以 MariaDB 5.5 為基礎, 加上移植自 MySQL 5.6 版的功能和自行開發的新功能。以下會介紹在 RHEL 及 CentOS 用 YUM 安裝 MariaDB 10.0 的方法。首先建立 MariaDB 的 YUM Repository, 建立檔案 /etc/yum.repos.d/MariaDB.repo, 根據不同的系統加不相關內容:RHEL / CentOS 7 RHEL …

Percona XtraBackup 備份 MySQL

MySQL 熱備份時如果沒有停止 MySQL 或者變成唯讀狀態, 備份檔有機會出現不連貫的問題。而 Percona XtraBackup 就是一個可以在 MySQL 不停機的情況下對進行熱備份的開源工具, 而且可以選擇完整備份或者增量備份。除了 MySQL 外, 它也支援 MariaDB 及 Percona Server。由於 Percona XtraBackup 是借用 transaction log 進行備份, 所以熱備份只適用於 InnoDB 的資料庫, 如果資料庫使用 MyISAM, 用 …

MySQL 設定 Master-Slave Replication 同步

MySQL 的 Master-Slave Replication (同步) 是當 Master 資料庫有變動時, 自動同步到 Slave 資料庫。由於 MariaDB 在 RHEL/CentOS 7 開始已經成為預設資料庫, 而且可以完全取代 MySQL, 所以以下也會以 MariaDB 進行設定, 但同樣方法在 MySQL 一樣可以的。假設已經有兩台 MySQL 伺服器, 以下兩部份分別是 Master 及 Slave …

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: 需要備份的資料庫, 以新行或空格分隔, …