设为首页 收藏本站
查看: 986|回复: 0

[经验分享] mysql扩展:xtrabackup备份和做主从

[复制链接]

尚未签到

发表于 2018-9-30 13:06:50 | 显示全部楼层 |阅读模式
  使用xtrabackup链接:http://pan.baidu.com/s/1miFpS9M 密码:86dx 链接:http://pan.baidu.com/s/1o7GXBBW 密码:ue2f
  xtrabackup 只能备份引擎为innodb的数据
  后来innobackeupex 则可以备份mysiam
  (使用mysqldump 备份大量数据时会很慢,使用xtrabackup则很快,且把所有数据文件都会备份ls /data/mysql)
  备份前保证mysql服务开启
DSC0000.jpg

  mysql 的数据目录我的放在/data/mysql
  一、使用xtrabackup全量备份过程:
  1.安装
  1.1 安装rpm包(只有下载这个rpm,才能)
  rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
  1.2 使用yum 下载xtrabackup
  yum list |grep xtrabackup (过滤所需的包)
  安装: yum install -y percona-xtrabackup
  (安装完后使用备份的命令:innobackupex)
  2.mysql中创建备份用户:
  mysql -uroot -p123456
  2.1 GRANT RELOAD,  LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backuser'@'localhost' identified by '123456';
DSC0001.jpg

  2.2 刷新权限操作(创建完用户时操作)
  flush privileges;
  (刷新完后退出mysql)
  3.备份操作:
  3.1 创建备份目录:
  mkdir /data/backup
DSC0002.jpg

  3.2 执行备份命令:
  innobackupex --defaults-file=/etc/my.cnf --user=backer --passwork='123456'  /data/backup
  (--defaults-file=/etc/my.cnf  这个选项是要放在所有的参数之前,文件路径由每个人设定的配置文件为主,且只有指定它才可以找到datadir
DSC0003.jpg

  的路径,就是mysql服务的数据目录文件。)
  执行命令后报错:
DSC0004.jpg

  问题原因是它自动的去找它默认的.sock(/var/lib/mysql/mysql.sock)文件。所以在命令中我们要指定我们定义的.sock文件路径。
  innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456'    -S /tmp/mysql.sock   /data/backup
  (/tmp/mysql.sock是我在配置文件my.cnf中定义的)
DSC0005.jpg

  3.3查看备份文件:
  cd /data/backup/
  ls
  du -sh *
DSC0006.jpg

  原文件和备份文件对比:
DSC0007.jpg

  (备份出来的文件不能直接复制至mysql的数据文件直接使用。因为备份文件是有自带格式的。)
  4.数据恢复
  4.1 停止mysql服务:
  /etc/init.d/mysqld  stop
DSC0008.jpg

  4.2删除mysql数据库文件(datadir的路径文件)
  删除原数据:(为了安全还是先把原数据目录文件复制移动)
  mv /data/mysql /data/mysql.bak
  mkdir /data/mysql
  chown -R mysql:mysql /data/mysql    //指定属主和属组,因为原来文件的属主和属组都是mysql
  (不/data/mysql/下的所有文件的属主和属组修改成mysql,则在启动服务时无法启动,出现下图的错误:(chown -R  ,-R是针对目录,作用是级联更改)
DSC0009.jpg

  )
  4.3恢复数据:
  (1)相当初始化步骤:
  innobackupex --use-memory=512M --apply-log
  2018-05-13_11-05-07
  (
  --use-memory= 这个选项是为了加快备份速度的,分配大小主要看我们机器内容的大小而定,--apply-log 指定具体备份数据文件,因为我们备份的数据文件是以时间点命名的。)
  (2)真正备份命令:
  innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/
  2018-05-13_11-05-07
  (--copy-back 指定备份文件路径,备份目录为全量备份)
DSC00010.jpg

  (ibdatal是绝对不能删除的,真正存储数据的文件)
  恢复完数据后,数据的属主和数组要修改为mysql 否则启动不了服务。
  chown -R /data/mysql
  一般业务操作:先备份后做主从,备份尽量在凌晨操作.
  !!!!以上这种操作的备份方式是全量备份执行过程!!
  二、增量备份
  启动mysql服务:且同用上面操作的mysql备份用户。
  1.创建备份目录:mkdir /data/backup/
  2.先全量备份:
  innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock /data/backup
DSC00011.jpg

DSC00012.jpg

  3.模拟增量备份:
  3.1 创建 一个数据库,并导入数据:
  mysql -uroot -p123456 -e "create database dbbackup"
  mysqldump -uroot -p123456 zrlog >/tmp/zrlog.sql
  mysql -uroot -p123456 dbbackup < /tmp/zrlog.sql
DSC00013.jpg

  3.2 增量备份:
  3.2.1 第一次增量备份
  innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock --incremental /data/backup --incremental-basedir=/data/backup/全量备份文件(2018-05-13_15-09-13)
  (要注意的是--incremental和--incremental-basedir,--incremental-basedir后面加的是全量备份文件的路径)
  执行命令后在/data/backup/生成一个文件,大小为新创数据库内容大小:
DSC00014.jpg

  3.2.1 第二次增量备份
  (
  创建 一个数据库,并导入数据:
  mysql -uroot -p123456 -e &quot;create database dbbackup2&quot;
  mysql -uroot -p123456 dbbackup2 < /tmp/zrlog.sql
  )
  备份命令:(和第一次增量备份的命令基本一样,但是最后备份目录是基于第一次增量备份目录之上的)
  innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock --incremental /data/backup --incremental-basedir=/data/backup/第一次增量备份目录
DSC00015.jpg

  此时就有了一个全量备份文件和两个增量备份文件:
DSC00016.jpg

  4.数据恢复
  4.1 停止mysql服务:/etc/init.d/mysqld stop
DSC00017.jpg

  4.2 删除mysql 原数据
  rm -rf /data/mysql/*
  4.3 数据恢复加载初始化(类似初始化过程)
  4.3.1 先全备初始:
  innobackupex --apply-log --redo-only /data/backup/全量备份目录
  (innobackupex --apply-log --redo-only /data/backup/2018-05-13_15-09-13 >/tmp1.log 2> /tmp/1.log)
  注意:比仅仅全量备份初始化多了 --redo-only 选项,>/tmp1.log 2> /tmp/1.log是把输出放置一个文件(正确或错误输出)
  4.3.2 第一次增量备份初始:
  innobackupex --apply-log --redo-only /data/backup/全量备份目录  --incremental-dir=/data/backup/第一次增量备份目录
  4.3.2 第二次增量备份初始:
  innobackupex --apply-log  /data/backup/全量备份目录  --incremental-dir=/data/backup/第二次增量备份目录
  (这一步的时候不需要--redo-only选项)
  4.3.3 执行应用操作:
  innobackupex --apply-log  /data/backup/全量备份目录
DSC00018.jpg

  4.4 真正备份命令:
  innobackupex --copy-back /data/backup/全量备份文件
  (执行完命令后可以发现我们增量的数据量文件)
DSC00019.jpg

  最后执行一下 chown -R mysql:mysql /data/mysql 修改属主和数组,否则启动不了mysql服务。
  注意:
  1.在进行增量备份的时候,第一次增量备份应基于全量备份之上,第二次基于第一增量备份之上,依次类推。
  2.当我们增量备份都是在增加数据没有删除数据的情况下,我们恢复数据时可以直接初始化全量备份和最后一次增量备份即可。最后执行innobackupex --apply-log  /data/backup/全量备份目录和innobackupex --copy-back /data/backup/全量备份文件
  一般企业mysql的架构用的是哪一种呢?
  主从
  innobackex 要求数据库版本在5.6以上
  使用 Xtrabackup 在线对MySQL做主从复制
  http://seanlook.com/2015/12/14/mysql-replicas/  参考
  1.主库操作:
  1.1 创建复制账号:
  mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_ali'@'192.168.5.%' IDENTIFIED BY 'slave_ali_pass';
  mysql> FLUSH PRIVILEGES;
  1.2 赋予备份用户权限:
  mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppass';
  mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS,SUPER ON *.* TO 'bkpuser'@'localhost';
  mysql> FLUSH PRIVILEGES;
  1.3.全量备份
  innobackupex --defaults-file=/opt/mysql/my.cnf --host=localhost --port=3306 --user=bkpuser --password=${BKP_PASS} /data/backup/mysql
  把全量备份目录复制到(做从库)的目录,rsync
  2.全量备份(从库上操作)
  在恢复的数据库服务器(从库)上:
  2.1 恢复准备
  $ innobackupex --use-memory=16G --apply-log 全量备份文件
  2.2 确认数据库是关闭的,并且datadir,目录下为空
  $ innobackupex --defaults-file=/opt/mysql/my.cnf --use-memory=16G --copy-back  全量备份文件
  2.3数据执行copy-back完成数据恢复后
  修改数据文件的属性:
  chown -R mysql.mysql /opt/mysql_data
  3.启动从库
  3.1 启动数据库,注意看日志
  /opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/my.cnf &
  提示:如果你不确定这个库是谁的从库,保守起见加上--skip-slave-start启动,兴许能防止数据不一致。
  3.2change master
  登录数据库:
  $ mysql -uslave_ali -p'slave_ali_pass' -S /opt/mysql_data/mysql.sock
  mysql> change master to master_host=MASTER_HOST, master_port=3306,
  master_user='slave_ali',master_password='slave_ali_pass', master_log_file='mysql-bin.000135', master_log_pos=262484673;
  上面的 master_log_file 和 master_log_pos 即是输出的值,也可以在新的数据目录下xtrabackup_binlog_info找到信息。
  3.3验证同步延迟
  从库执行 show slave status\G


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-606769-1-1.html 上篇帖子: mysql基本语句操作练习 下篇帖子: mysql, mariadb删库、恢复的完整模拟实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表