MySQL数据库迁移服务器


关键词

MySQL数据库 导入 导出

摘要

本文介绍如何将一个MySQL数据库,从一台服务器上导出,再成功的导入到另一台服务器的MySQL中。

该文档用于将虚拟主机服务器上的某个Mysql网站换至另一台Mysql服务器上。
文中命令行导入导出表的方式,也可通过phpmyadmin的操作来实现。但phpmyadmin有上传大小和脚本超时设置,当备份文件过大时可能失败。
如果因特殊原因,原有数据库在换后需要保留观察一段时间的,则在换之前必须将原有数据库密码设置为"1qaz"。防止用户以后使用旧数据库,以及因数据库被使用致导数据时出现问题。

-------------------------------------------------------

一、查询表的存储引擎

1.以root账户登录到Mysql。

2.执行以下命令查看使用各存储引擎的表的数量:
    select engine,count(1) from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='数据库名' group by engine;

3.如果步骤2结果中存在innodb存储引擎的表,则执行以下命令查看innodb表名和字符集,如果不存在,则跳过该步:
    select TABLE_SCHEMA as DB_DBNAME,TABLE_NAME,ENGINE,TABLE_COLLATION from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='数据库名' and engine = 'innodb';

4.如果步骤2结果中存在存储引擎为null的表,则说明对应的表已经出现问题,无法正常访问,需要检查一下原因,作特殊处理。如果不存在,则跳过该步。

对于表的存储引擎全部为myisam和memory的情况,可使用 二(1) ,复制文件方法导入导出整个数据库。
对于表的存储引擎大部分为innodb的情况,可使用 二(2) ,命令直接导入导出整个数据库。
对于表的存储引擎大部分为myisam,但又存在少量innodb存储引擎表的情况,可使用 二(3) ,复制文件方式导myisam的表,命令行方式导innodb的表。

-------------------------------------------------------

二(1)、使用复制文件方式导整个数据库

1.将数据库目录中的文件全部压缩。压缩包剪切到zgsjftp目录,并传到目标服务器上。

2.在主站后台使用重新开设功能。重新开设后,会在目标服务器上开设新的空数据库,删除原有服务器上的旧数据库。

3.将压缩包解压,并将文件复制到新数据库中,新的空数据库中原先有一个db.opt文件,需要替换该文件。

注意:
1.在导数据时,无论是旧数据库还是新数据库,对应数据库目录下不可以存放压缩包等多余文件,否则会导致今后的数据库删除失败。
2.如果压缩或复制文件过程中,提示文件正在被使用,无法复制,则需要将数据库密码改为"1qaz",等待一段时间后再作操作。

-------------------------------------------------------

二(2)、使用命令行方式导整个数据库

1.执行以下命令查看各存储引擎的表数量
    select TABLE_COLLATION,count(1) from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='数据库名' group by TABLE_COLLATION;
如果存储引擎为gbk或utf8,则使用命令行导出时基本不会出问题,如果为latin1或其他特殊字符集,则需要注意导出和导入时是否有报错,并且在导入后进行检查。

2.用以下方式导出数据库,并将导出后的备份文件传至新服务器
    C:>mysqldump -u用户名 -p 数据库名 >> d:\zgsjftp\数据库名__日期.sql
    Enter password:***********

注意:
1.如果导出时出现"...when using LOCK TABLES"等报错,需要检查一下原因,作相关处理,不能忽略不管。
2.如果使用mysqldump导出时命令行一直卡住不结束,并且导出的.sql文件大小始终为0,可以开启另一个命令行,登录数据库运行以下命令,运行后即可正常导出。
    C:>mysql -u用户名 -p
    Enter password:***********
    welcome....
    mysql>use 数据库名;
    Database changed
    mysql>unlock tables;

3.在新服务器上手动或使用Winhost创建新数据库

4.用以下方式导入备份文件到新数据库
    C:>mysql -u用户名 -p
    Enter password:***********
    welcome....
    mysql>use 数据库名;
    Database changed
    mysql>source d:/zgsjftp/数据库名__日期.sql;

注意:
1.如果在第1步操作时发现数据库中有特殊字符集的表,则在做导入操作时需要注意是否有error或warning的报错提示,如果有则需要检查一下原因,作相关处理,不能忽略不管。
2.source命令中的备份文件路径为"/"而非"\"。

5.换后检查
1.换后登录phpmyadmin,查看表的总数量是否和原数据库中数量一致,查看各个表的存储引擎是否有"使用中"字样(有该字样代表这个表有问题)。对于存在innodb表的情况,随机点进几个innodb表查看内容,看是否可以正确显示中文,是否有乱码。
2.如果是网站和数据库一起换服务器的情况,则换后打开使用到该数据库的网站,查看网站是否有连接数据库报错,再点击内部的链接,查看网站程序是否可以正常读取数据库。

注意:如果在第1步操作时发现数据库中有特殊字符集的表,则必须做换后的检查,如果表的字符集都为gbk或utf8,则该步可跳过。

6.在原服务器上手动或使用Winhost删除换前的旧数据库,并将主站数据库信息中的IP由原服务器地址换为新服务器地址

-------------------------------------------------------

二(3)、使用复制文件加命令行方式导数据库

操作步骤参照二(2)中的方式。这里只对导入导出步骤中有区别的项进行说明。

1-1.用以下方式导出各innodb表到一个文件中
    C:>mysqldump -u用户名 -p 数据库名 表名1 表名2 表名3 >> d:\zgsjftp\数据库名.innodb__日期.sql
    Enter password:***********
1-2.或使用phpmyadmin导出指定的innodb表
    a)登录phpmyadmin
    b)选择需要操作的数据库
    c)点击上方的"导出"
    d)选择需要导出的数据库,并勾选下方的"另存为文件"选框,点击"执行"按钮后导出

2-1.用以下方式将innodb表导入到新数据库中:
    C:>mysql -u用户名 -p
    Enter password:***********
    welcome....
    mysql>use 数据库名;
    Database changed
    mysql>source d:/zgsjftp/数据库名.innodb__日期.sql;
2-2.或使用phpmyadmin导入备份
    a)登录phpmyadmin
    b)选择需要操作的数据库
    c)点击上方的"导入"或"import"
    d)选择需要导入的本地.sql文件,点击"执行"按钮后导入备份

3.导入innodb表后,再将剩余的myisam存储引擎的表对应的.frm、.myd、myi文件,用复制的方式导到新数据库中。


 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:MySQL数据库迁移服务器:http://www.splaybow.com/post/mysql-migrate-server.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« MySQL中select语句使用order按行排序 MySQL中给表添加一个字段(字段名、是否为空、默认值) »