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':
解决方案:
查看本机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}"
导入报错:
解决方案:
修改配置文件my.cnf中
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,将STRICT_TRANS_TABLES 删除掉
导入大量数据报错:
导致这个问题的可能是有wait_timeout , interactive_timeout ,max_allowed_packet 系统默认的值小。修改这三项的值。
查看系统mysql的日志,/var/log/mysqld.log,
如果是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';
可以看到是4M,然后调大为16M(1024*1024*16)或者更大:set global max_allowed_packet=1024*1024*16;
修改后执行导入,一切正常,解决问题。
注意:
使用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,
解决方法:
可以通过两个参数来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 |
|
这个是限制了导入导出目录,或者禁止了导入导出。
mysql中执行一下下边语句,查看 secure-file-priv
1 |
|
secure_file_prive=null -- 限制mysqld 不允许导入导出
secure_file_priv=/tmp/ -- 限制mysqld的导入导出只能发生在/tmp/目录下
secure_file_priv=' ' --不对mysqld 的导入 导出做限制
根据自己需要修改配置文件即可