一次生產環境mysql遷移操做(二)mysql空間釋放(碎片整理)sql
在項目過程當中咱們常常要對數據庫進行遷移、歸檔、拆分等等操做,如今描述下幾種方案數據庫
咱們有須要將物理盤上的mysql遷移到ssd上,先說一下生產環境一直有數據產生,且數據量達到500G。 方案一:使用mysqldump,無論是導入導出都太耗時,沒有一天拿不下 方案二:直接物理磁盤上拷貝也是很是耗時,拷貝過程當中須要停服務,這就致使停服務時間太長。 方案三:這個方案原本是頗有優點的,可是實際狀況導出導入也須要鎖表或鎖庫,也是須要停服務,原本咱們就不須要增量拷貝,innobackupex優點體如今增量拷貝。 方案四:拷貝速度快 綜合停服務時間以及操做難易度,最終選擇了方案四。 下面描述下操做步驟工具
執行命令ui
pvcreate /dev/vdb
vgcreate vgssd /dev/vdb
lvcreate --size280G -n mysql vgssd
mv /var/lib/mysql /var/lib/mysql_bak mount /dev/vgssd/mysql /var/lib/mysql
cp -af remotepath /var/lib/mysql chown mysql:mysql /var/lib/mysql
執行完上面步驟後,再開始進行歸檔操做.net
systemctl stop httpd systemctl stop supervisord systemctl stop mariadb umount /var/lib/mysql
執行umount時須要保證各終端退出該目錄code
lvcreate -s --size 180G -n mysql_backup /dev/vgssd/mysql
mount /dev/vgssd/mysql /var/lib/mysql systemctl start mariadb systemctl start httpd systemctl start supervisord
mkdir -p /mnt/mysql_temp mount -o ro,nouuid /dev/vgssd/mysql_backup /mnt/mysql_temp ls /mnt/mysql_temp
mkdir -p /mnt/backup/mysql cp -a /mnt/mysql_temp /mnt/backup/mysql
umount /mnt/mysql_temp lvremove /dev/vgssd/mysql_backup
暫定爲30天,這樣才能備份全部數據。 由於須要硬件準備,因此這裏只能手動操做blog
若是磁盤數據丟失須要恢復數據,則執行下面操做 一、關停mysql服務 systemctl stop mariadb圖片
二、修改/etc/my.conf datadir= /mnt/backup/mysqlrem
三、重啓服務 systemctl start mariadb