linux下

一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出单个库的数据和表结构:
mysqldump -h IP -P端口 -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 数据库名.sql
mysql/bin/  mysqldump -uroot -p abc > abc.sql

mysql/bin/mysqldump -h127.0.0.1  -P3306 -uroot -p databases tables --where  > tables.sql
敲回车后会提示输入密码

/usr/bin/mysqldump -u root -p databases table >table.sql

不导出某张表需要在表名后面增加,   --ignore-table=库名.表名              (库名和表名之间有点)

 

导出所有库中的表和数据
mysqldump -h IP -P端口 -u用户名 -p密码 --all-databases  > 数据库数据.sql
导出指定库所有表和数据
mysqldump -h IP -P端口 -u用户名 -p密码 --databases 数据库1 数据库2 > 数据库数据.sql

 

2、只导出表结构
mysqldump -h IP -P端口 -u用户名 -p密码 -d 数据库名  表名 > 数据库名.sql

mysql/bin/mysqldump -h127.0.0.1 -P3306-uroot -p -d databases tables --where  > tables.sql

注:mysql/bin/  --->  mysql的data目录

报错:

mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':

windows mysql命令导出sql文件 mysql数据库导出sql文件_数据库

解决方案:

查看本机mysql 版本 和 数据库mysql的版本,一般都是不一样导致的,将本机的mysqldump版本和 数据库的版本一致。

二、导入数据库
1、首先建空数据库
mysql>create database abc;

2、导入数据库
方法一:
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;

(查看数据库编码格式

show variables like 'character_set_database';)

(3)导入数据(注意sql文件的路径)
mysql>source /home/abc/abc.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -uabc_f -p abc < abc.sql

(4)导入数据(sql语句)

insert_sql="insert into ${TABLENAME} values('billchen',2)"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e  "${insert_sql}"

 

导入报错:

windows mysql命令导出sql文件 mysql数据库导出sql文件_mysql_02

解决方案:

修改配置文件my.cnf中

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,将STRICT_TRANS_TABLES 删除掉

 

导入大量数据报错:

windows mysql命令导出sql文件 mysql数据库导出sql文件_mysql_03

导致这个问题的可能是有wait_timeout , interactive_timeout ,max_allowed_packet 系统默认的值小。修改这三项的值。

查看系统mysql的日志,/var/log/mysqld.log,

windows mysql命令导出sql文件 mysql数据库导出sql文件_sql_04

如果是Got a packet bigger than 'max_allowed_packet' bytes

解决方案:

发现了 max_allowed_packet 参数,官方解释是适当增大 max_allowed_packet 参数可以使client端到server端传递大数据时,系统能够分配更多的扩展内存来处理。

查看mysql max_allowed_packet的值: show global variables like 'max_allowed_packet';

windows mysql命令导出sql文件 mysql数据库导出sql文件_sql_05

可以看到是4M,然后调大为16M(1024*1024*16)或者更大:set global max_allowed_packet=1024*1024*16; 

windows mysql命令导出sql文件 mysql数据库导出sql文件_sql_06

修改后执行导入,一切正常,解决问题。 

注意: 
使用set global命令修改 max_allowed_packet 的值,重启mysql后会失效,还原为默认值。

如果想重启后不还原,可以打开 /etc/my.cnf  文件,添加 

wait_timeout=2880000

interactive_timeout=2880000

max_allowed_packet=16M 即可。

(如果导入数据时还出现 连接中断的报错,就增大wait_timeout,interactive_timeout,max_allowed_packet的值)

 

报错:

查看系统mysql的日志,/var/log/mysqld.log,

windows mysql命令导出sql文件 mysql数据库导出sql文件_数据库_07

解决方法:

可以通过两个参数来disable这个功能,在MYSQL的配置文件 /etc/my.cnf 中[mysqld]中加入下面的参数:

[mysqld]

--skip-host-cache

--skip-name-resolve

 

 

window下

1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u dbuser -p dbname > dbname.sql

2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u dbuser -p dbname users> dbname_users.sql

3.导出一个数据库结构
mysqldump -u dbuser -p -d --add-drop-table dbname >d:/dbname_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库
常用source 命令
进入mysql数据库控制台,如
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/dbname.sql

 

有的时候需要把在一张表中用 select 语句查询出来的结果保存到另一张结构相同的表中,可以有几种方法来实现:

在命令行下使用一对SQL语句完成该操作:

导出查询结果:Select语句 into outfile '保存路径+文件名';

导入查询结果:load data local infile '保存路径+文件名' into table 表明 character set utf8;

这里导出有可能会报错,

 

1

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

  

这个是限制了导入导出目录,或者禁止了导入导出。

mysql中执行一下下边语句,查看 secure-file-priv 

1

show variables like '%secure%'

secure_file_prive=null  -- 限制mysqld 不允许导入导出

secure_file_priv=/tmp/  -- 限制mysqld的导入导出只能发生在/tmp/目录下

secure_file_priv=' '      --不对mysqld 的导入 导出做限制

根据自己需要修改配置文件即可