zoukankan      html  css  js  c++  java
  • mysql数据库维护(备份和还原)和性能提高

    为了有效防止数据丢失,并将损失降到最低,应对数据库服务器做维护。数据库维护,包括数据备份,还原,导出和导入操作。

    1. MySQL数据库备份

    所谓数据库维护,主要包含备份数据,还原数据和数据库迁移,对于MySQL来说,还包括数据库对象表的导出和导入。

    1.1 通过复制数据文件实现数据备份

    造成数据损失的原因很多,主要包含如下几个方面:

    a. 存储介质故障:保存数据库文件的磁盘设备损坏,用户没有数据库备份导致数据彻底丢失。

    b. 用户的错误操作:如误删了某些重要数据,甚至整个数据库。

    c. 服务器的彻底瘫痪,系统需要重建。

    由于MySQL服务器中的数据文件是基于磁盘的文本文件,所以最简单,最直接的备份操作就是数据库文件直接复制出来。该种方式对InnoDB存储引擎的表不合适,只适合存储引擎为MyISAM的表。

    1.2 通过命令mysqldump实现数据备份

    有三种形式:备份一个数据库,备份多个数据库,备份所有数据库。

    1.2.1 备份一个数据库

    mysqldump -u username -p dbname
    table1 table2...tablen > backupname.sql

    示例如下:

    备份数据库company下的表t_dept;

    mysqldump -u root -p company t_dept > d:	_dept_back.sql

    1.2.2 备份多个数据库

    mysqldump -u username -p --databases dbname1 dbname2 ... dbname3 > backupname.sql

    示例如下:

    备份数据库company数据库和companynew数据库:

    mysqldump -u root -p --databases company companynew> d:database_company_back.sql

    1.2.3 备份所有数据库

    mysqldump -u username -p --all  > backupname.sql

    示例如下:

    备份所有数据库:

    mysqldump -u root -p --all  > c:all_database_back.sql

    2. MySQL数据还原

    2.1 通过复制数据文件实现数据还原

    在通过复制数据文件这种方式实现数据还原时,必须保证两个MySQL数据库的主版本号一致,因为只有MySQL数据库主版本号一致时,才能保证两个MySQL数据库的文件类型是相同的。由于通过复制数据文件实现数据备份时,对存储引擎类型为I:nnoDB的表不可用,仅对存储引擎为MyISAM类型的表有效。因此通过复制数据文件实现数据还原时,也只对存储类型为MyISAM类型的表有效。

    注意:MySQL数据库服务器的版本号,第一个数字表示主版本号。

    2.2 通过命令mysql实现数据还原

    mysqldump -u -username -p [dbname] < backname.sql

    示例如下:

    还原数据库company中的表t_dept:

    mysqldump -u -root -p t_dept < t_dept_back.sql

    3.MySQL数据库表导出到文本文件

    3.1 执行SELECT ... INTO OUTFILE 实现导出到文本文件

    SELECT [file_name] FROM table_name [where condition] INTO OUTFILE 'file_name' [OPTION]

    示例如下:

    实现将表t_dept里的所有数据导出到文件t_dept里:

    SELECT * FROM t_dept INTO OUTFILE 'c:/t_dept_1.txt'  FIELDS TERMINATED BY '.' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY '>'  TERMINATED BY '
    ';

    上述实现了将表t_dept里的所有数据导出到文件t_dept_1.txt文件里,而且还设置了相应的显示格式。

    3.2 执行命令mysqldump实现导出到文本文件

    mysqldump -u root -p Password -T file_directory dbname table_name[option];

    示例如下:

    将相应的数据导出到文本文件t_dept.txt里:

    mysqldump -u root -proot -T c:company t_dept;

    上述实现将表t_dept里的所有数据导出到文件t_dept里。

    3.3 执行命令mysql实现导出到文本文件

    mysql -u root -p Password -e"SELECT [file_name] FROM table_name " dbname > file_name;

    示例如下:

    mysql -u root -p root -e"SELECT * FROM t_dept"  company> c:/t_dept.txt;

    4. MySQL实现文本文件导入到数据库表

    4.1 执行"LOAD DATA INFILE"命令实现文本文件导入到数据库表

    LOAD DATA[LOCAL] INFILE file_name INTO TABLE table_name [OPTION];

    示例如下:

    LOAD DATA INFILE 'c:/t_dept.txt' INTO TABLE t_dept FIELDS TERMINATED BY '.' OPTIONALLY ENCLOSED BY '"' TERMINATED BY '
    ';

    4.1 执行命令mysqlimport实现导入文本文件

    mysqlimport -u root -p Password[--LOCAL] dbname file_name[OPTION]

    示例如下:

    mysqlimport -u root -p root company c:t_dept.txt FIELDS TERMINATED BY '.' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY '>' TERMINATED BY '
    ';

    5. 数据库迁移

    5.1 相同版本的MySQL数据库之间的迁移

    该种数据库迁移最容易实现。

    5.2 不同版本的MySQL数据库之间的迁移

    两种方式:低版本向高版本和高版本向低版本。

    5.3 不同数据库之间的迁移

    由于不同数据库之前的差异性,没有普遍适用的办法。

    6. 数据性能优化

    (备注):

    备注1:

    备份和还原的备注:如果所有的操作均是对远程数据库的操作,则在-u前面加-h ip即可。如需要操作192.168.1.101数据库的数据,写法是:

    mysql -h 192.168.1.101 -u root -p -e"SELECT * FROM t_dept"  company> c:/t_dept.txt;

     备注2:

    使用命令mysqldump进行导出数据到本地磁盘,执行该命令的时候不要进入mysql的控制台再使用,这样会报outfiledisabled错误。而是直接使用MYSQL/bin目录下的mysqldump.exe,通过windows的命令进入。

  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/4659943.html
Copyright © 2011-2022 走看看