Mysql--数据的导入导出以及备份

Posted 心恩惠动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql--数据的导入导出以及备份相关的知识,希望对你有一定的参考价值。

一、导入导出

1.1、into outfile(只导出数据)

注意:mysql 5.7+版本,secure_file_priv 的值默认为NULL,即不允许导入或导出,需在 /etc/my.cnf 添加  secure_file_priv = \'\' 或者  secure_file_priv = \'指定目录\'  ,重启mysql

1.1.1 导出
select * from table_name into outfile \'file_path\';

#指定分隔符
select * from table_name into outfile \'file_path\' fields terminated by \',\';

 

注意事项:

  • 导出的文件一定是不存在的
  • mysql用户对导出目录要有读写权限
  • 导出的文件默认以\\t为字段分隔符 \\n为行分隔符

 

1.1.2 导入
load data infile \'文件路径\' into table 表名;

#指定分隔符
oad data infile \'文件路径\' into table 表名 fields terminated by \'分隔符\';

 

注意事项:

  • 文件不要放在mysql读不到的地方(注意目录权限)
  • mysql用户对要导入的文件至少要有读的权限(文件权限)
  • 文件名用双引或单引号引起来

 

二、备份

2.1、mysqldump

2.1.1 简介

mysqldump 是 MySQL 自带的逻辑备份工具。

备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。

 

2.1.2 选项
选项 缩写 说明
登录选项:    
-host -h 数据库服务器ip地址
–port -P 服务器端口号
–user -u MySQL 用户名
–password -p MySQL 密码
备份选项:    
-–databases  or  -B   指定要备份的数据库,多个数据库空格隔开
-–all-databases  or  -A   备份所有数据库
–-all-tablespaces  or  -Y   备份所有表
–-add-drop-table   在每个CREATE TABLE语句前添加DROP TABLE语句,防止数据表重名
--no-data  or  -d   不备份数据
-–compact   压缩模式,产生更少的输出
-–comments   添加注释信息
--lock-tables   备份前,锁定数据库表
–-lock-all-tables  or  -x   备份前,锁定所有库表(全备时)
–-no-create-db/–no-create-info   禁止生成创建数据库语句
-–force   当出现错误时仍然继续备份操作
–-default-character-set   指定默认字符集
--flush-logs  or  -F   更新二进制日志文件
-master-data=2   1:每备份一个库就生成一个新的二进制文件(默认);2:生成一个新的二进制文件
--single-transaction   对事务引擎执行热备,获取一致性备份,仅对innodb存储引擎有效
     
-w   相当于-where

 

2.1.3 导出

导出所有库,表(包含表结构与表数据)

#all.sql默认保存在bin下
库:
mysqldump -u -p --all-databases > all.sql

表:
mysqldump -u -p --databases db1 –-all-tablespaces > all.sql

 

导出多个库,表

库:
mysqldump -u -p --databases db1 db2 > all.sql

表:
mysqldump -u -p --databases db1 --tables t1 t2 > all.sql

 

导出单库,表

库:
mysqldump -u -p --databases db1 > all.sql

表:
mysqldump -u -p db1 t1 > all.sql

 

只导出表结构

mysqldump -u -p -d db1 t1 > all.sql

 

只导出表数据

mysqldump -u -p -t db1 t1 > all.sql

 

使用-w指定时间段导出

mysqldump -uroot -pyy123456 -t -w "notify_time > unix_timestamp(\'2022-04-20\') and notify_time < unix_timestamp(\'2022-05-06\')" sre alarm_lists > test2.sql

 

2.1.4 恢复
库:
mysql -u -p < all.sql

表:
mysql -u -p db1 < all.sql 

 

2.1.5 source(导入大的sql文件)
mysql -u -p -e \'use db1;source all.sql;\'

 

2.1.6 LOCK TABLES

导表的时候可能会报错:mysqldump: Got error: 1044: "Access denied for user \'sre\'@\'10.84.xxx.226\' to database \'db1\'" when doing LOCK TABLES

这是因为没有lock table的权限,在命令行加上 --single-transaction 解决

mysqldump --single-transaction -u sre -p -P 33066 -h 10.79.5.xxx db1 alarm_lists > alarm_lists.sql

 

wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]

总的问题有两个,一是apache的配置,二是mysql的导出和导入。以及迁移后遇到的一些问题解决过程和方法。

A机器为老server。B为新server,A机器使用Appserv,B使用wmap,在配置多网站时候,遇到了一点儿不同。

除了都要打开httpd.conf

Include conf/extra/httpd-vhosts.conf

LoadModule rewrite_module modules/mod_rewrite.so


在httpd-vhosts.conf中配置多网站相应的文件夹

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "C:/wamp/www/wp"
    ServerName B.com
    ServerAlias www.B.com
    ErrorLog "logs/dummy-host.x-error.log"
    CustomLog "logs/dummy-host.x-access.log" common
	<Directory "C:/wamp/www/wp">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>


<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "C:/wamp/www/"
    ServerName www.A.com
    ErrorLog "logs/dummy-host2.x-error.log"
    CustomLog "logs/dummy-host2.x-access.log" common
	<Directory "C:/wamp/www/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>


以下这一段是 wmap设置新加的设置

<Directory "C:/wamp/www/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

从A机器把站点源代码搞到B机器上,非常多方法。ftp

A机器上用mysqldump把相应的db备份起来,通过ftp下载到B机器上。

一定要设定字符集。不然导入到b机器上时候,会出错。


mysql.exe -uroot  -p****  –default-character-set=utf-8   mydb   mytable  >  mytable.sql


b机器上运行  mysql -uroot -p –default-character-set=utf8 mytable  < mytable.sql


事先在b机器上创建好 mytable库,注意数据库编码要和原来的保持一致

使用navicat来备份还原常常会出现这个问题。非常可能就是编码的原因


wordpress迁移后,假设出现首页正常,文章内页404错误,是因为固定链接的问题。

1,.htaccess要开放写权限。这样在自己定义wp的永久链接时,wp会自己主动重写.htaccess。所谓删除或手动重写.htaccess就是由于没有开放它的写权限。

2,找到APACHE文件里的httpd.conf文件, 把#LoadModule rewrite_module modules/mod_rewrite.so 前的#去掉,载入rewrite模块。

3,查看APACHE文件里的httpd.conf文件是否默认设置了AllowOverRide为None,假设是,要改成All。

或者改动 wordpress所在的vhost段加入 < Directory /wp所在路径/> AllowOverride All < /Directory> 

然后进入wordpress后台,又一次确定下 固定链接。重写.htaccess文件。

重新启动apache,一切搞定。


查看很多其它关于wordpress迁移












以上是关于Mysql--数据的导入导出以及备份的主要内容,如果未能解决你的问题,请参考以下文章

wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]

mysql 数据库导入导出方法总结

MongoDB 导入导出以及数据库备份

MongoDB导入导出以及数据库备份

MongoDB导入导出以及数据库备份

MongoDB导入导出以及数据库备份