mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile
摘要;本文简单介绍了mysql的三种备份,并解答了有一些实际备份中会遇到的问题。备份恢复有三种(除了用从库做备份之外), 直接拷贝文件,load data
和 mysqldump命令。少量数据使用mysqldump命令,存储的是SQL语句,比较通用,但是也会遇到版本兼容性问题。整个数据库迁移使用拷贝文件的方式
(1)数据库到文件
1 直接拷贝文件(这个速度最快)
,innodb_log_group_home_dir目录的文件拷贝至对应的目录下
数据迁移,换磁盘阵列
-- ===============================================================
新的磁盘阵列上建一个目录/mysqldata/
1 停止mysql数据库
service mysqld stop;
2 复制data目录下所有文件夹到新目录
cp -rp /usr/local/mysql/data/ /mysqldata/
3 修改/etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data/
innodb_data_home_dir = /usr/local/mysql/data/
innodb_log_group_home_dir = /usr/local/mysql/data/
变换成
[mysqld]
datadir=/mysqldata/data/
innodb_data_home_dir = /mysqldata/data/
innodb_log_group_home_dir = /mysqldata/data/
4 重启数据库
service mysqld start;
由于数据量较大,直接做dump耗时太长,故而采用如下方式处理:
首先,在服务器B上安装了与服务器A同版本的MySQL,停止MySQL服务,将安装后的data目录删除;
然后,服务器A锁住全部表,从服务器A将整个data目录和数据文件直到拷贝到服务器B上,修改服务器B上MySQL的my.cnf文件中的datadir指向新的data目录。
最后,启动服务器B上的MySQL服务。
结果启动失败,报出 “无法启动MySQL服务”异常,查看错误日志,发现问题描述如下:
InnoDB: Error: log file ./ib_logfile0 is of different size 0 63963136 bytes
InnoDB: than specified in the .cnf file 0 6291456 bytes!
这段信息的意思是日志文件比my.cnf中设置的日志文件配额要大,服务不能启动。原因是日志文件从服务器A复制而来,在服务器A上的my.cnf中日志配额要比服务器B上的my.cnf日志配额大,
计算日志文件大小:63963136/(1024*1024)=61M,6291456/(1024*1024)=6M,怪不得呢?
将服务器B上的my.cnf中的innodb_log_file_size的参数设置为61M,再次启动mysql,启动成功。
总结需要注意事项:
1.修改datadir为新的data目录。
2.合理修改innodb_log_file_size的值为实际迁移过来的日志文件大小。
3.字符集/默认引擎的修改,要与迁移前统一。
详述:
同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务
由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误.
意思就是说在数据库引擎类型为InnoDB时,拷贝数据文件的同时还需要拷贝ibdata1,于是把ibdata1也拷贝过去覆盖,发现还是有点问题,于是停止mysql服务,将目录下的ib_logfile*文件全部删除掉,重新启动mysql服务,well done,可以了
1 LOAD DATA
(1)mysql> load data infile '/opt/user.txt' into table user;
把本地文件导入服务器的mysql中,添加 LOCAL INFILE
典型的示例
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(ENCLOSEDBY
指名输出字段被什么所包围,上例中输出字段两边均添加")
如果您只想载入一个表的部分列,则应指定一个列清单:
LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2);
在客户端也可以向远程MySQL服务器执行 ‘load data‘ 命令,
比如,客户端IP: 192.168.204.132
服务器IP: 192.168.204.131
可以在192.168.204.132上,
执行命令: mysql -h 192.168.204.131 -utest -ptest test -e'load
data
local infile "/opt/xxxxx.txt" into table loadtest;'
条件:
如果使用源码编译的MySQL,在configure的时候,需要添加参数:--enable-local-infile
客户端和服务器端都需要,否则不能使用local参数
导出
SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限
果您想要在服务器主机之外的部分客户主机上创建结果文件,您不能使用SELECT...INTO
OUTFILE。在这种情况下,您应该在客户主机上使用比如“mysql –e "SELECT
..." > file_name”的命令,来生成文件。
(2)mysqlimport -uroot -p123 17rumen /opt/user.txt
mysqlimport客户端提供了LOAD DATA INFILEQL语句的一个命令行接口。mysqlimport的大多数选项直接对应LOAD DATA INFILE子句。LOAD DATA命令参见( http://www.wzxue.com/db/mysql/05/15/20/)
这样调用 mysqlimport:
shell> mysqlimport [options] db_name textfile1 [textfile2 ...]
对于在命令行中命名的每个文本文件, mysqlimport去掉文件名的扩展名并使用结果来确定将导入文件内容的表名。例如,文件 patient.txt、patient.text和patient均将导入表patient。
2 mysqldump备份
mysqldump -u用户名 -p密码 -h主机 数据库 a -w "sql条件" --lock-all-tables > 路径
mysql还原
mysql
-halg -ubroot -ppassword database <./division.sql
使用管道:
mysqldump
-u user -p'password' db-name foo | ssh user@remote.box.com mysql -u user -p'password' db-name foo
mysqldump命令详解
几个常用用例:
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\wcnc_db.sql
本文综合转载自网上。
3 补充
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)
参考: http://www.cnblogs.com/cosiray/archive/2012/03/02/2376595.html
4 问题收录
1 大量备份时 出现以下问题。mysqldump: Error 2013: Lost connection
to MySQL server during query when dumping table `Mapping_event_20131018` at row: 357917
官方解释
This section also covers the related Lost
error.
connection to server during query
The most common reason for the MySQL
error is that the server timed out and closed the connection. In this case, you normally get one of the following error codes (which one you get is operating system-dependent).
server has gone away
Error Code | Description |
---|---|
CR_SERVER_GONE_ERROR |
The client couldn't send a question to the server. |
CR_SERVER_LOST |
The client didn't get an error when writing to the server, but it didn't get a full answer (or any answer) to the question. |
By default, the server closes the connection after eight hours if nothing has happened. You can change the time limit by setting the wait_timeout
variable
when you startmysqld.
See Section 5.1.4,
“Server System Variables”.
分析:
转自:http://www.myexception.cn/operating-system/486737.html
在使用mysqldump的时候(尤其是向NFS上备份的时候),很多人都被’mysqldump:Got error:2013: Lost connection to MySQL server during query when dumping table’的问题困扰,在Manual中对这个问题有一些简单的说明。
在向NFS上备份的时候,数据的流向是这样的:MySQL Server端从数据文件中检索出数据,然后分批将数据返回给mysqldump客户端,然后mysqldump将数据写入到NFS上。一般地,向NFS上写入数据的速度较之Server端检索发送数据的速度要慢得多,这就会导致mysqldump无法及时的接受Server端发送过来的数据,Server端的数据就会积压在内存中等待发送,这个等待不是无限期的,当Server的等待时间超过net_write_timeout(默认是60秒)时它就失去了耐心,mysqldump的连接会被断开,同时抛出错误Got
error: 2013: Lost connection。
增加net_write_timeout可以解决上述的问题的。在实践中发现,在增大net_write_timeout后,Server端会消耗更多的内存,有时甚至会导致swap的使用(并不确定是不是修改net_write_timeout所至)。建议在mysqldump之前修改net_write_timeout为一个较大的值(如1800),在mysqldump结束后,在将这个值修改到默认的60。
可能方法:
调整以下参数变大
1)
max_allowed_packet
2)connect_timeout
3)net_write_timeout
4)使用quick选项
Use the "quick" option when you start mysqldump (to skip
memory buffering the dump file) and write the data straight to disk as it
arrives. With a 20GB file it will be very easy to exceed available system
memory allocation limits.
net_write_timeout
max_allowed_packet
= 16M
net_buffer_length = 32K
2
额外参数
--single-transaction参数,这样可以让锁表时间变得很短
--single-transaction如果是innodb不加锁啊!相当于对表SELECT,其他会话不能更改表结构。
我10:00备份,中间一直有数据insert和update,一直到10:10,那我备份出来的是10:00的快照?而备份期间的insert和update可以执行?
对
mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile的更多相关文章
- mysql 5.7版本目录无data文件夹的解决办法
安装mysql 5.7+版本时,若发现因根目录下,缺少data文件夹的情况, ***请不要去拷贝其他版本的data文件夹!*** 因为此操作会出现很多潜在问题:比如我遇到的执行show variabl ...
- mysql文件导入到数据库load data infile into table 的使用例子
load data infile "C:/Users/Administrator/Desktop/1.txt"into table 要一个已经存的表名 字段默认用制表符隔开 文件 ...
- MySQL 8 拷贝MySQL数据库到另一台机器
通过mysqldump生成包含SQL语句的文件,然后将其应用到目标机器的mysql客户端程序. mysqldump --help 可以获取mysqldump选项以及用法. 如果源服务器上启用了GTID ...
- 快速的mysql导入导出数据(load data和outfile)
1.load data: ***实际应用:把日志生成的xls文件load到MySQL中: mysql_cmd = "iconv -c -f utf-8 -t gbk ./data/al_ve ...
- 解决ubuntu server mysql load data infile 导入本地文件ERROR 1148 (42000)错误。
问题:在ubuntu server 上使用apt-get 安装完 mysql 使用 load data infile 出现错误,错误代码如下: ERROR (): The used command i ...
- Mysql 命令 load data infile 权限问题
[1]Mysql命令load data infile 执行权限问题 工作中,经常会遇到往线上环境mysql数据库批量导入源数据的场景. 针对这个场景问题,mysql有一个很高效的命令:load dat ...
- LOAD DATA INFILE – performance case study
转: http://venublog.com/2007/11/07/load-data-infile-performance/ I often noticed that people complain ...
- Mysql 利用拷贝data目录文件的方式迁移mysql数据库
Mysql 利用拷贝data目录文件的方式迁移mysql数据库 步骤如下: 1.首先要确定data目录 这个问题困扰了我很久,因为网上的帖子大部分只是说拷贝mysql数据库目录下的data文件夹中的数 ...
- mysql导入数据load data infile用法整理
有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. ...
随机推荐
- 转 linux下xargs命令用法详解
xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤 ...
- 8.3 sikuli 集成进eclipse 报错:eclipse中运行提示 Win32Util.dll: Can't load 32-bit .dll on a AMD 64 bit platform
sikuli运行出现问题:Win32Util.dll: Can't load 32-bit .dll on a AMD 64 bit platform 在64位平台上无法加载32位的dll文件 解决办 ...
- 解决centos无法上传文件和打开文件夹
使用yum搭建了ftp服务..yum的使用参考:http://blog.csdn.net/enson16855/article/details/9140623 windows使用FileZilla连接 ...
- 字符串编码问题(Ascii、Unicode、UCS-2、GBK、UTF-8)
1.字符编码的发展 第一阶段:ASCII阶段,(American Standard Code for Information Interchange, "美国信息交换标准码),计算机当时只支 ...
- select初始化默认选项
在写select时由于 在数据库中的得到的值都是字典型的值0,1,2所以在初始化的时候要
- CDockablePane使用总结
基于 http://blog.csdn.net/kikaylee/article/details/8936953 CDockablePane的基本布局和用法 新建一个SDI工程,在CMainFrame ...
- Java成员变量默认值
Java中明确规定:1.如果是引用型的,比如:String,还有类对象,他们的默认值都是:null:2.而如果是值类型:double,int,long,float,char等等,他们都是:0:还有一个 ...
- lucene索引合并与增量索引
利用 Lucene,在创建索引的工程中你可以充分利用机器的硬件资源来提高索引的效率.当你需要索引大量的文件时,你会注意到索引过程的瓶颈是在往磁盘上写索引文件的过程中.为了解决这个问题, Lucene ...
- CentOS下编译安装Apache2(新)
官网下载apache,apr, apr-util,pcre httpd-2.4.16.tar.gz http://httpd.apache.org/download.cgi#apache24 apr- ...
- ArrayList遍历的同时删除--- 删除还是用迭代器的比较好,其它的都会有问题.
http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除-- 删除还是用迭代器的比较好,其它的都会有问题. 博客分类: 随笔 Javathread ...