MySQL备份与还原操作

MySQL备份与还原操作

备份原理:使用mysql的mysqldump命令直接备份数据库
mysqldump原理:执行查询SQL select * form table 来获取数据,同时获取表名
备份范围:会备份数据库中的 table、视图、存储过程、函数
文件格式:默认格式是inset批量插入语句,表存在会先删除表,然后创建表

工具准备

MySQL客户端的安装

备份数据库

我这里只做了单个数据库备份
首先需要创建备份的文件夹,在该文件夹下执行 可以不用写备份的绝对路径

mysqldump -h192.168.0.20 -P端口 -uroot -p密码 数据库 > bak.sql;
mysqldump -h192.168.0.20 -P6306 -uroot -p密码 mydb > bak.sql;

备份完成别忘了压缩存储

tar -acf  bak.sql.tar.gz  bak.sql

还原数据库

建议将库先提前创建好
如果还原的数据库与备份数据库名不同,可以通过参数指定数据库名。

mysql -h192.168.0.50 -uroot -p密码  -P端口 还原到的数据库< bak.sql
mysql -h192.168.0.50 -uroot -p密码  -P3306 mytest_20190411< bak.sql

踩坑

视图备份

视图有定义者(definer)这个概念
MySQL中视图定义者的作用

函数和存储过程之类的,本身调用是不存在权限这个概念的。

definer这个值并不会限制函数和存储过程被调用的权限,但会限制函数和存储过程访问数据库的权限。

函数和存储过程在访问数据库时,会获取definer用户对应的数据库访问权限。

因为在迁库后,definer值没有修改,原数据库的用户在新库中不存在,所以报错,修改一下definer值就可以了

由于 我操作的库是从库,有一部分视图是主库同步过来的,但是 从库的账户和主库是独立的,导致主库创建视图的用户在从库中不存在,在做备份时会报以下错误

mysqldump: Got error: 1449: "The user specified as a definer ('vill***sale'@'%') does not exist" when using LOCK TABLES

在从库中villaale这个用户是不存在的,导致视图无法备份,要解决这个问题有两个方法。
方法1:创建 'villa
ale’@’%’ 这个用户,并给与他 备份数据库的权限
方法2:修改 视图 定义者的信息,改为从库中的用户,这个我没有采用,主要担心修改后导致主从数据不一致

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章