聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

一月 23, 2014

小惡魔AppleBOY
AppleBOY
小惡魔 – 電腦技術 – 工作筆記 – AppleBOY is about »

tag cloud

» MySQL 5.6 UUID 複製資料到 Slave Server

mysql_logo

MySQL Performance Blog 看到這篇 Beware of MySQL 5.6 server UUID when cloning slaves,裡面提到如果是要複製資料到 Slave 機器,大部分的使用者肯定是將 /var/lib/mysql 目錄整個 copy 到 Slave 機器上。如果是 MySQL 5.6 Server 目錄內會有 auto.cnf 設定檔,這是 MySQL 5.6 新的功能叫做 server_uuid,在啟動 MySQL 後,就會自動建立 auto.cnf 檔案,此檔案就像是 my.cnfmy.ini 設定檔一樣,只是內容只有支援 [auto] 並且只有支援 server_uuid 這 key 值,例如

[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562

注意的是此檔案是系統自動建立,請勿自行修改內容。如果將 /var/lib/mysql 複製到其他機器,就會出現 server uuid 衝突,所以請務必小心,複製到新的伺服器後,請把 auto.cnf 移除,讓系統重新建立新的 uuid,如果是用 Percona XtraBackup 就不會出現此問題。

四月 5, 2013

小惡魔AppleBOY
AppleBOY
小惡魔 – 電腦技術 – 工作筆記 – AppleBOY is about »

tag cloud

» MySQL 用 MySQLDump 備份 InnoDB 注意事項

mysql_logomysql_logo

大家在備份 MySQL 資料庫時一定是使 mysqldump 指令,不管是 MyISAM 或 InnoDB 都一樣, 在處理 InnoDB 格式備份時使用 mysqldump -single-transaction,但是你會發現在大多的備份狀況都是 OK 的,只是有時候會發現有的資料表只有備份到 structure 而無備份到 Data?

MySQL Performance Blog 看到這篇講解 Best kept MySQLDump Secret,此問題出在 how MySQL’s Transactions work with DDL,ALTER TABLE 會建立一個 temporary table,並且將該資料表資料複製過去,接著刪除原有資料表,最後將 temporary table 命名為原來資料表。

底下是原作者提到的原因

How does data visibility works in this case ? DDLs are not transactional and as such the running transaction will not see the contents of old table once it is dropped, transaction also will see the new table which was created after transaction was started, including table created by ALTER TABLE statement. Transactions however apply to DATA which is stored in this table and so data which was inserted after start of transaction (by ALTER TABLE statement) will not be visible. In the end we will get new structure in the dump but no data.

最好的解法就是改用 mysqldump -lock-all-tables,但是備份的時候,資料庫是無法寫入,僅能讀取,也或者可以透過 Percona Xtrabackup 工具來備份 InnoDB。

一月 1, 2013

小惡魔AppleBOY
AppleBOY
小惡魔 – 電腦技術 – 工作筆記 – AppleBOY is about »

tag cloud

» Percona XtraBackup InnoDB 備份工具

Percona XtraBackup 是一套 compiled C 程式,用於備份 MySQL InnoDB 資料庫,過去備份 MyISAM 或 InnoDB 都是透過 mysqldump 指令,或者是直接 copy /var/lib/mysql 目錄當作備份(這方法盡量少做,請確定 MySQL 版本一致),XtraBackup 用於備份 InnoDB 資料部份,請注意這邊,真的只有”備份資料”,而不是全部(結構跟資料),底下仔細介紹如何安裝:

安裝方式

大家可以選擇透過 yumapt Repository 方式安裝,下面介紹 apt 方式即可。

$ gpg --keyserver  hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
$ gpg -a --export CD2EFD2A | sudo apt-key add -

將 apt 伺服器寫入 /etc/apt/sources.list

deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main

VERSION 請至換 Ubuntu Server 版號,如果您想測試實驗性版本請加入底下連結

deb http://repo.percona.com/apt VERSION main experimental
deb-src http://repo.percona.com/apt VERSION main experimental

注意事項

根據不同的 MySQL 版本來選擇 XtraBackup 指令,可以參考 Choosing the Right Binary,所以大家不要用錯指令了。

透過寫入 my.cnf 可以設定備份目錄,此步驟可以省略

[xtrabackup]
target_dir = /home/backups/mysql/

完整備份

可以備份 InnoDB data and log files 從 /var/lib/mysql/ 到 /home/backups/mysql/

$ xtrabackup --defaults-file=/etc/mysql/my.cnf --backup --target-dir=/home/backup/mysql --datadir=/var/lib/mysql

–defaults-file 吃 MySQL 設定檔,我們可以另外指定 –target-dir 備份目錄,如果之前你有寫入 my.cnf,指令就可以少寫 –target-dir,備份完成以後,我們需要 Prepare 兩次 MySQL Data

$ xtrabackup --defaults-file=/etc/mysql/my.cnf --prepare --target-dir=/home/backup/mysql

看到底下訊息就代表成功了

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130101 11:55:26  InnoDB: Starting shutdown...
130101 11:55:30  InnoDB: Shutdown completed; log sequence number 450927116

恢復備份資料

XtraBackup 程式並非用於備份 MyISAM 資料及 .frm 檔案,所以必須分開備份,底下是用於恢復 InnoDB 資料

$ cd /home/backup/mysql/
$ rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /var/lib/mysql
$ chown -R mysql:mysql /var/lib/mysql/
$ service mysql restart

另外請記的先備份 .frm 檔案,沒 .frm 檔案,備份資料就沒有用了。

Related View

support:

biggo.com.tw

A Django site.