MySQL的物理备份
备份详细过程
1、关闭mysql服务
2、备份数据文件。一般在mysql/data,需要注意的有:
原理描述
-
当表类型是MyISAM时,数据文件则以”
Table.frm
””Table.MYD
””Table.MYI
””三个文件存储于”/data/$databasename/
”目录中。 -
当表类型是InnoDB时,数据文件则存储在
”$innodb_data_home_dir/
″中的ibdata1
文件中(一般情况),结构文件存在于table_name.frm
中。 -
MySQL的数据库文件直接复制便可以使用,但是那是指“
MyISAM
”类型的表。 而使用MySQL-Front直接创建表,默认是“InnoDB
”类型,这种类型的一个表在磁盘上只对应一个“*.frm
”文件,不像MyISAM那样还“*.MYD
,*.MYI
”文件。
MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB
类型的表却不行。 解决方法就是同时拷贝innodb
数据库表“*.frm
”文件和innodb
数据“ibdata1
”文件到合适的位置。
还原详细过程
1、关闭mysql服务
2、把备份文件还原到对应的数据目录中。注意:
如果表类型是MyISAM,直接还原data/databasename文件夹。
如果表类型是InnoDB,需要还原 ibdata1文件和data/databasename文件夹
3、更改数据目录权限 chown -R mysql:mysql mysql/data/
4、启动mysql服务,打开mysql进行验证
演示过程
[root@my ~]# systemctl stop mysqld ##关闭数据库,备份物理文件
[root@my ~]# mkdir /opt/backup ##创建备份目录
[root@my ~]# tar zcvf /opt/backup/mysql-backup-$(date +%F).tar.gz /usr/local/mysql/data/
z:代表的是压缩
c:代表的是打包
x:代表的是解压
v:代表的是过程
f:代表的是指定文件名
zcvf代表打包压缩指定文件为f后的文件
[root@my ~]# ls /opt/backup/
mysql-backup-2019-04-17.tar.gz
[root@my ~]# systemctl start mysqld ##模拟数据库丢失
[root@my ~]# mysql -uroot -p123123
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> drop database mysql;
Query OK, 31 rows affected, 2 warnings (0.06 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| sys |
+--------------------+
3 rows in set (0.00 sec)
mysql> exit
[root@my ~]# systemctl stop mysql ##恢复数据库文件
[root@my ~]# rm -rf /root/*
[root@my ~]# mkdir /root/backup
[root@my ~]# tar zxvf /opt/backup/mysql-backup-2018-08-02.tar.gz -C /root/backup/
[root@my ~]# cp /root/backup/usr/local/mysql/data/mysql/ /usr/local/mysql/data/ -rf
[root@my ~]# chown mysql:mysql -R /usr/local/mysql/data/mysql/
[root@my ~]# systemctl start mysqld
[root@my ~]# mysql -uroot -p123123
mysql> use mysql;
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
...
mysql> exit