例一:tar备份数据库(物理备份)
注意:备份期间,服务不可用
备份过程
1.停止数据库:systemctl stop mariadb ; mkdir /backup
2.tar备份数据: tar -cvf /backup/mysqlbackup.tar /var/lib/mysql
3.启动数据库:systemctl start mariadb
还原过程
1.停止数据库:systemctl stop mariadb
2.导入备份数据:tar -xf mysqlbackup.tar /var/lib/mysql
3.权限 :chown -R mysql.mysql /var/lib/mysql
4.启动数据库:systemctl start mariadb
例二:快照实现物理备份
lvm创建逻辑卷管理
[root@localhost ~]#pvcreate /dev/sdb
[root@localhost ~]#vgcreate vg_mariadb /dev/sdb
[root@localhost ~]#lvcreate -l 100 -n lv_mariadb vg_mariadb
[root@localhost ~]#mkfs.xfs /dev/vg_mariadb/lv_mariadb
[root@localhost ~]#mount /dev/vg_mariadb/lv_mariadb /var/lib/mysql
挂载:
MySQL运行一段时间,数据并没有存储LVM:将现在的数据迁移到LVM
1. 将数据迁移到LVM
[root@tianyun ~]# systemctl stop mysqld
[root@tianyun ~]# mount /dev/datavg/lv-mysql /mnt/ //临时挂载点
[root@tianyun ~]# cp -a /var/lib/mysql/* /mnt //将MySQL原数据镜像到临时挂载点
[root@tianyun ~]# umount /mnt/
[root@tianyun ~]# vim /etc/fstab //加入fstab开机挂载
/dev/datavg/lv-mysql /var/lib/mysql xfs defaults 0 0
[root@tianyun ~]# mount -a
[root@tianyun ~]# chown -R mysql.mysql /var/lib/mysql
[root@tianyun ~]# systemctl start mysqld
二进制日志
【如何开启mysql5.7的binlog日志呢?
在my.inf主配置文件中直接添加三行
[plain] view plain copy
log_bin=ON
log_bin_basename=/var/lib/mysql/mysql-bin
log_bin_index=/var/lib/mysql/mysql-bin.index
三个参数来指定,
第一个参数是打开binlog日志
第二个参数是binlog日志的基本文件名,后面会追加标识来表示每一个文件
第三个参数指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录
当然也有一种简单的配置,一个参数就可以搞定
[plain] view plain copy
1.log-bin=/var/lib/mysql/mysql-bin
这一个参数的作用和上面三个的作用是相同的,mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
这些配置完毕之后对于5.7以下版本应该是可以了,但是我们这个时候用的如果是5.7及以上版本的话,重启mysql服务会报错。这个时候我们必须还要指定一个参数
[plain] view plain copy
2.server-id=123454
随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
有了上述的配置之后,我们就可以重新启动我们的mysql了
3.service mysqld restart
启动成功之后,我们可以登陆查看我们的配置是否起作用
[plain] view plain copy
4.show variables like '%log_bin%' 】
开启mariadb二进制日志
vim /etc/my.cnf
log-bin=/var/log/mysql/mylog
systemctl restart mariadb
cd /var/lib/mysql
ls
1\. 重启mysqld 会截断
2\. flush logs 会截断
3\. reset master 删除所有binlog rm -rf /
4\. 删除部分
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2016-04-02 22:46:26';
5\. 暂停 仅当前会话 SET SQL_LOG_BIN=0;
SET SQL_LOG_BIN=1;
6\. 截取binlog
all:
# mysqlbinlog mysql.000002
datetime:
# mysqlbinlog mysql.000002 --start-datetime="2018-12-05 10:02:56" --stop-datetime="2018-12-05 11:02:54"| mysql -u root -p'Qingyang@123'
position:
mysqlbinlog --start-position 744 --stop-position 844 mysql-bin.000001 | mysql -u root -p'Qingyang@123'
**Slow Query Log**
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3
# mkdir /var/log/mysql-slow/
# chown mysql.mysql /var/log/mysql-slow/
# systemctl restart mysqld
查看慢查询日志
测试:BENCHMARK(count,expr)
SELECT BENCHMARK(50000000,2*3);
快照备份
创建LVM逻辑卷的时候,并不会发生数据的物理复制。再换句话说,>复制元数据,不复制物理数据
使用前提:
1.数据文件要在逻辑卷上
2.此逻辑卷所在卷组必须有足够的空间使用了快照卷
3.数据文件和事务日志要在同一个逻辑卷上
将数据迁移到LVM
systemctl stop mariadb
pvcreate /dev/sdb1
vgcreate myvg /dev/sdb1
lvcreate -n mydata -L +1G myvg
mkfs.ext4 /dev/myvg/mydata
mkdir /mysql_data
mount /dev/myvg/mydata /var/lib/mysql
or
vim /etc/fstab //加入fstab开机挂载
/dev/datavg/lv-mysql /var/lib/mysql xfs defaults 0 0
cp -a /var/lib/mysql/* /mnt
chown -R mysql.mysql /var/lib/mysql
systemctl start mariadb
关闭锁 创建快照
echo "FLUSH TABLES WITH READ LOCK; SYSTEM lvcreate -L 100M -s -n lv_snap /dev/myvg/mydata; \
UNLOCK TABLES;" | mysql -uroot
从快照中备份
mount -o ro /dev/myvg/lv_snap /lvm_data //xfs -o ro,nouuid
cd /lvm_data
mkdir /backup
tar -cf /backup/`date +%F`-mysql-all.tar ./*
移除快照
cd; umount /lvm_data/
lvremove -f /dev/myvg/lv_snap
LVM快照恢复流程:
1. 停止数据库 systemctl stop mariadb
2. 清理环境 rm -rf /var/lib/mysql/*
3. 导入数据
4. 修改权限
5. 启动数据库
6. binlog恢复
[root@slave2 ~]# tar -xf /backup/2016-12-07-mysql-all.tar -C /var/lib/mysql/
[root@slave2 ~]# chown -R mysql.mysql /var/lib/mysql/*
[root@slave2 ~]# systemctl start maria
网友评论