mysql的备份和还原
一 备份
mysql提供了专门做备份的程序(命令) – mysqldump。使用这个命令不需要你登录进mysql,因为它不是mysql内部的命令,命令的格式如下:
mysqldump -u root -p [dbname]>[backup file]
当执行上面的命令后,就会要求输入的root的密码,输入后备份就开始。备份的文件就生成在执行命令的当前目录。
1. 备份单个数据库
mysqldump -u root -p mydb1 > mydb1.sql
2. 备份多个数据库
mysqldump -u root -p –databases mydb1 mydb2 > mydb.sql
注意如果你没有加
–databases
这个选项,意义就变成了备份数据库mydb1的mydb2表了。
3. 备份所有的数据库
mysqldump -u root -p –all-databases > allmydb.sql
不过一般不要这么做,因为mysql和test这2个mysql默认已有的数据库你大部分情况不需要备份的。
mysqldump: Couldn't execute 'SELECT @@GTID_MODE': Unknown system variable 'GTID_MODE'
原因就不解释了,直接告诉你解决方法,加上下面的选项,注意s前面是2杠
–-set-gtid-purged=OFF
如果你遇到类似这样的错误,很有可能是你使用了不同版本的mysql的server和client,解决办法就是使用和服务器相同版本的mysql的客户端。
mysqldump: Couldn't execute 'show create table `general_log`': Table 'mysql.general_log' doesn't exist
二 还原
还原则使用mysql命令就可以。格式如下:
mysql -u root -p [database] < [database file]
这里要注意一点,需要保证database是存在的,如果不存在先使用下面的命令创建:
create database XXXX
例如:
mysql -u root -p mydb1 < mydb1.sql
三 备注
上面提到的备份还原方法只是数据表数据,trigger,但是不包括stored procedure。想要备份stored procedure,需要额外的参数,
- –routines – FALSE by default
- –triggers – TRUE by default
就是-rountines
这个参数默认是false,而triggers默认就是true,这就是为什么triggers会被备份,而stored procedure不会的原因。
比如你想连同stored procedure一起备份就是:
mysqldump -uroot -p mydb1 -routines > mydb1.sql
完。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.
很好,谢谢了。
问题是不停版本数据库之间的数据如何转移呢?转完就出错,头疼…
请参看我在
不同版本的mysql数据迁移
中的恢复