共计 2112 个字符,预计需要花费 6 分钟才能阅读完成。
以快速创建一个 MySQL 从库的需求出发,如下几种备选方案:
环境:
node1 主库
node2 新服务器,需要做成 node1 从库(node1 已经配置免密码 SSH 登陆到 node2)
软件版本:
CentOS7 64 位
MySQL 官方 5.6 版本,数据库的用户名和密码都是 root
都安装了 percona-xtrabackup
0 弱鸡版:【最耗时间】
mysqldump -uroot -proot -q –single-transaction -A –master-data=2 > /root/all.sql # 备份
mysql -uroot -proot < /root/all.sql # 还原
这种方式最简单的,不多说。
1 初级版:
innobackupex –user=root –password=root –socket=/var/lib/mysql/mysql.sock –parallel=4 –no-timestamp /root/bak
缺点速度慢,备份的文件较大。好处是相对于 mysqldump 而言,这个工具能并行备份操作。
scp /root/bak root@node2:/root # 将 /root/bak 这个压缩后的文件 scp 到目标主机 node2,
然后去 node2 解压命令如下:
mkdir /tmp/mysql # /tmp/mysql 这是个临时存放拷贝过来的数据库解压文件目录, 和 mysql 的自己的 datadir 没有任何关系
cat /root/bak | lz4 -d | xbstream -x -C /tmp/mysql
innobackupex –apply-log /tmp/mysql/# 导入数据后,还要执行下整理操作
innobackupex –copy-back /tmp/mysql/ # 将整理好的数据库文件导入到原先的 mysql datadir 里
chown mysql.mysql /data/mysql/ -R
/etc/init.d/mysql start 这样一台 mysql 就启动好了
2 lz4 加速版:
yum install lz4 -y # 先在 2 台主机上安装这个压缩工具,性能比 gzip、bzip2 强很多。
node1 上备份:
innobackupex –user=root \
–password=root \
–socket=/var/lib/mysql/mysql.sock \
–parallel=4 \
–no-timestamp \
–stream=xbstream . | lz4 -B4 > /root/bak
scp /root/bak root@node2:/root # 将 /root/bak 这个压缩后的文件 scp 到目标主机 node2,
然后去 node2 执行如下命令:
mkdir /tmp/mysql
cat /root/bak | lz4 -d | xbstream -x -C /tmp/mysql
innobackupex –apply-log /tmp/mysql/# 导入数据后,还要执行下整理操作
innobackupex –copy-back /tmp/mysql/ # 将整理好的数据库文件导入到原先的 mysql datadir 里
chown mysql.mysql /data/mysql/ -R
/etc/init.d/mysql start 这样一台 mysql 就启动好了
3 管道加强版:
innobackupex –user=root \
–password=root \
–parallel=4 \
–socket=/var/lib/mysql/mysql.sock \
–no-timestamp \
–stream=xbstream . |\
lz4 -B4 |\
ssh root@node2 \
“cat – > /tmp/bak”
# 上面这条命令是直接压缩并备份到远程的 /tmp 目录下
然后到 node2 上去还原:
mkdir /tmp/mysql
cat /tmp/bak | lz4 -d -B7 | xbstream -x -C /tmp/mysql
innobackupex –apply-log /tmp/mysql/# 导入数据后,还要执行下整理操作
innobackupex –copy-back /tmp/mysql/ # 将整理好的数据库文件导入到原先的 mysql datadir 里
chown mysql.mysql /data/mysql/ -R
/etc/init.d/mysql start 这样一台 mysql 就启动好了
4 直接备份到远程同时还原版:【 推荐使用方法 4 】
首先需要在 node2 上创建个 /tmp/mysql 目录,不然 node1 备份文件发送过去没目录存放。
然后再 node1 上执行:
innobackupex –user=root \
–password=root \
–parallel=4 \
–socket=/var/lib/mysql/mysql.sock \
–no-timestamp \
–stream=xbstream . |\
lz4 -B4 |\
ssh node2 \
“cat – | lz4 -d -B7 | xbstream -x -C /tmp/mysql”
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140736.htm