zoukankan      html  css  js  c++  java
  • mysql数据库恢复

    1.数据库恢复基本事项

    MySQL命令以及source命令恢复数据库的原理就是在数据库里重新执行文件的SQL语句的过程。数据恢复和字符集的关联很大,如果字符集不正确则会导致恢复的数据乱码。

    2.利用source命令恢复数据库

    2.1.使用source命令恢复数据库的说明

    进入MySQL数据库控制台后,切换到想恢复数据的数据库。

    接着,使用source命令进行恢复,后面接.sql文件。

    source oldboy_db.sql
    

    这个oldboy_db.sql文件是系统的相对路径,默认是登录MySQL前的系统路径,也可以使用完整的路径。

    2.2.恢复演示

    1、先执行一次正式的备份:
    mysqldump -B --master-data=2 --single-transaction oldboy|gzip >/opt/oldboy.sql.gz
    2、恢复前解压为SQL文件:
    gzip -d /opt/oldboy.sql/gz
    3、登录数据库删除oldboy数据库,然后准备用source恢复:
    drop database oldboy;
    select * from oldboy.test;
    source /opt/oldboy.sql
    select * from oldboy.test;
    

    3.利用MySQL命令恢复(标准)

    3.1.使用MySQL命令恢复基本实践

    MySQL命令是MySQL数据库自带的重要命令之一,除了日常登录数据库之外,还可以通过Mysqldump备份的文件或者人工编辑的SQL语句文件对数据库进行数据恢复。

    drop database oldboy;
    mysql </opt/oldboy.sql
    mysql -e "select * from oldboy.test;"  #使用-e参数,可在命令行查MySQL数据
    

    3.2.使用开发人员提交的SQL语句恢复文件

    假定开发人员让运维人员或DBA插入数据到数据库(可能是通过邮箱发送的,内容可能是字符串或者SQL文件)。

    此时的SQL文件里很可能没有use db这样的字样,此时如果使用mysql命令导入就要指定数据库名。

    mysql oldboy </opt/oldboy.sql
    

    指定库名oldboy的作用就相当于是在数据库里执行use oldboy,因此如果使用mysqldump备份时不使用-B参数,那么在恢复时不但可能会提示没有数据库,还可能会提示没有选择数据库。

    并且在SQL语句文件里尽可能地加入字符集设置,以防止乱码。假设开发人员提交了N行插入语句,则需要插入到数据库。

    insert into test(name) values('小陶');
    
    文件里执行:
    set names utf8;
    insert into test(name) values('小陶');
    
    如果是utf8数据库,人工编辑的SQL文件,使用“utf8”的格式。
    
    恢复数据到数据库:
    mysql </opt/insert.sql
    mysql oldboy</opt/insert.sql
    mysql -e "select * from oldboy.test;"
    

    使用-B参数以后,备份结果中会带use oldboy和“create database oldboy”语句,而恢复时在mysql命令后指定库名就相当于是执行use oldboy。

    mysql </opt/oldboy.sql
    
    否则:
    mysql oldboy</opt/insert.sql
    

    3.3.针对压缩的备份数据进行恢复

    3.3.1.使用gzip解压(会删除压缩文件)

    gzip -d /opt/oldboy.sql.gz
    mysql </opt/oldboy.sql
    

    3.3.2.使用gzip解压(不会删除压缩文件)

    !mysqldump  #调用最近的mysqldump命令,重复执行备份。
    mysqldump -B --master-data=2 --single-transaction oldboy|gzip >/opt/oldboy.sql.gz
    gzip -cd /opt/oldboy.sql.gz >/opt/oldboy1.sql  #特殊解压方法
    mysql </opt/oldboy1.sql
    

    3.3.3.使用gunzip解压(不会删除压缩文件)

    gunzip -cd /opt/oldboy.sql.gz >/opt/oldboy.sql
    mysql </opt/oldboy2.sql
    或者:
    gunzip</opt/oldboy.sql.gz|mysql
    

    3.3.4.使用zcat读取压缩包数据

    zcat /opt/oldboy.sql.gz >/opt/oldboy3.sql
    mysql </opt/oldboy3.sql
    

    4.利用mysql -e参数查看mysql数据

    mysql命令提供了一个功能,可以让使用者无须登录数据库,在Linux命令行就可以执行SQL语句。

    4.1.查看数据库oldboy库test表数据

    mysql -e "use oldboy;select * from test;"
    

    4.2.利用mysql -e参数查看SQL线程执行状态

    mysql -e "show processlist;"
    
    查看慢查询语句:
    mysql -e "show full processlist;"
    
    show full processlist;
    
    kill id;  #id=xxx
    
    解决办法:
    调整MySQL的超时参数配置:
    show variables like '&_timeout%';
    set global wait_timeout = 60;
    set global interactive_timeout = 60;
    
    配置文件里修改:
    [mysqld]
    interactive_timeout = 120  #此参数设置后wait_timeout自动生效
    wait_timeout = 120
    
    其他方法:
    1、在PHP程序中,不使用持久链接,即使用mysql_connect而不是pconnect。
    2、PHP程序执行完毕,应该显式调用mysql_close。
    3、Java程序调整连接池(C3P0)或者调整JAVA服务(Tomcat有关连接池参数)。
    4、逐步分析MySQL的SQL查询及慢查询日志,找到查询过慢的SQL,优化。
    

    4.3.利用mysql -e参数查看mysql变量及性能状态

    查看mysql的所有参数配置:
    mysql -e "show variables;"
    
    查看my.cnf配置文件的配置有没有在数据库中生效:
    mysql -e "show variables like 'log-bin';"
    
    查看mysql数据库运行状态:
    mysql -e "show global status;"|head -5
    

    4.4.利用mysql -e参数不重启数据库修改数据库参数

    mysql -e "show variables;"|grep key_buffer
    mysql -e "set global key_buffer_size = 1024*1024*16;"
    mysql -e "show variables;"|grep key_buffer
    
    实现不重启数据库更改数据库参数:
    set global key_buffer_size = 1024*1024*16;  #及时生效,重启mysql失效
    

    4.5.利用mysql -e参数引出的重要命令

    show processlist;  #查看数据库里正在执行的SQL语句,可能无法看全完整的SQL语句。
    show full processlist;  #查看正在执行的完整SQL语句,完整显示。
    set global key_buffer_size = 1024*1024*16;  #不重启数据库调整数据库参数,直接生效,重启后失效。
    show variables;  #查看数据库的配置参数信息。例如,my.cnf里参数的生效情况。
    show variables like '%log_bin%';
    kill ID;  #杀掉SQL线程的命令,ID为线程号。
    show session status;  #查看当前会话的数据库状态信息。
    show global status;  #查看整个数据库运行的状态信息,要分析并要做好监控。
    show engine innodb status;  #显示innodb引擎的性能状态。
    

    4.6.mysqladmin命令常用参数

    mysqladmin password oldboy123  #设置密码
    mysqladmin -uroot -poldboy123 password oldboy  #修改密码
    mysqladmin -uroot -poldboy123 status  #查看状态,相当于show status
    mysqladmin -uroot -poldboy123 -i 1 status  #每秒查看一次状态
    mysqladmin -uroot -poldboy123 extended-status  #等同于show global status
    mysqladmin -uroot -poldboy123 flush-logs  #切割日志
    mysqladmin -uroot -poldboy123 processlist  #查看执行的SQL语句信息
    mysqladmin -uroot -poldboy123 processlist -i 1  #每秒查看一次执行的SQL语句
    mysqladmin -uroot -p'oldboy123' shutdown  #关闭mysql服务
    mysqladmin -uroot -p'oldboy123' variables  #相当于show variables
    

    4.7.mysql命令常用参数

    mysql命令常用参数 说明
    -u 指定数据库用户
    -p 指定数据库密码
    -S 指定数据库socket文件
    -h 指定数据库主机,默认localhost
    -P 指定数据库端口,默认3306
    -e 不登录数据库执行数据库命令
    --default-character-set=name 指定字符集登录数据库或备份
  • 相关阅读:
    p2394 精度题
    线性筛素数
    poj3468 线段树的懒惰标记
    逆元
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    判断素数遇到的问题
    Mergeable Stack(链表实现栈)
    组合数
    poj2594 机器人寻找宝藏(最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/yanyanqaq/p/12894412.html
Copyright © 2011-2022 走看看