实验环境

虚拟化设备:Esxi6.0
系统:Redhat7
数据库:mariaDB #操作与mysql相同
第18章 使用MariaDB数据库管理系统。
学会用各种姿势备份MySQL数据库

一、初始化mariaDB服务

yum install mariadb mariadb-server -y #在Redhat7中,用yum安装mysql默认安装的就是mariadb
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation #对数据库进行初始化操作,根据提示选择就好了,root密码初始设置为空,直接回车就好了。
firewall-cmd --permanent --add -service=mysql
firewall-cmd --reload

二、数据库的增改查删等基本操作

1、查

mysql -u root -p #进入数据库
SHOW database; #查看数据库
use mysql; #进入数据表mysql
SELECT * FROM mysql #查看mysql表里的信息(加WHERE 可跟限制条件)
SELECT name,price FROM mybook; #查看mybook表里name和price两项
SELECT * FROM mybook WHERE price>75;
DESCRIBE mysql; #描述表单

2、增

CREATE DATABASE linuxprobe; #创建数据库linuxprobe
CREATE TABLE mybook (name char(15),proce int,pages int); #创建数据包mybook
INSERT INTO mybook(name,price,pages) VALUES('linuxprobe','60','518'); #在数据表mybook添加信息

3、改

UPDATE mybook SET price=55; #修改mybook里price为55

4、删

DELETE FROM mybook; #删除mybook数据表所有数据
DROP DATABASE linuxprobe; #删除数据库linuxprobe
DROP TABLE mybook; #删除数据表mybook

三、数据库的备份及恢复

1、使用CP进行备份

① 准备工作

SHOW DATABASES; #查看当前数据库,得到需要备份的数据库名
USE employees; 
SELECT COUNT(*) FROM employees; #查看数据库employees的行数,以便恢复时候确认是否恢复完整。

② 向数据库施加读锁

FLUSH TABLES WITH READ LOCK; #向所有表施加读锁
UNLOCK TABLES; #CP备份完成后,解锁

③备份数据文件

mkdir /backup 
cp -a /var/lib/mysql/* /backup #保留权限的拷贝源数据文件
ls /backup

④模拟数据丢失并恢复

rm -rf /var/lib/mysql/* #删除数据库的所有文件
systemctl restart mariadb
SHOW DATABASES; #重启后原数据不存在,mysql自动在/var/lib/mysql/目录下添加了默认文件,所以root可以不用密码进入,并且原来的数据丢失
rm -rf /var/lib/mysql/* #删除默认添加的文件,不然下一步拷贝文件的时候会出现是否overwritte的询问
cp -a /backup/* /var/lib/mysql/ #将备份的数据库文件还原
systemctl restart mariadb
SHOW DATABASES; #数据库已恢复
USE employees; 
SELECT COUNT(*) FROM employees; #查看数据表行数没有变化

2、使用mysqldump+复制BINARY LOG备份

通过mysqldump进行一次完全备份, 再修改表中的数据, 然后再通过binary log进行恢复 二进制日志需要在mysql配置文件中添加 log_bin=on 开启

①使用mysqldump备份数据库

mysql -u root -p -e 'SHOW MASTER STATUS' #查看当前二进制文件的状态,并记录positon的数字(即mysql-bin)
mysqldump --all-databases --locak-all-tables > backup.sql #备份数据库到backup.sql文件中
#在主备份后创建一个数据库,用于二进制文件恢复实验
CREATE DATABASE TEST1; 
SHOW MASTER STATUS; #记下现在的position
cp /var/lib/mysql/mysql-bin.000003 /root #备份二进制文件
systemctl stop mariadb
rm -rf /var/lib/mysql/* #删除所有数据文件,造成数据丢失情况
systemctl start mariadb
SHOW DATABASES; #查看数据库,发现数据丢失
SET sql_log_bin=OFF; #暂时关闭二进制日志
source backup.sql #恢复数据
SET sql_log_bin=ON; #开启二进制日志
SHOW DATABASESL #数据库恢复,但是缺少主备份后创建的TEST1
mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysql employees #通过二进制日志增量恢复数据
SHOW DATABASES; #TEST1出现