精华内容
下载资源
问答
  • MySQL数据库升级

    2020-03-28 13:43:28
    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5...

    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5.6 升级至MySQL5.7的方法,并介绍其使用场景。

    01

       逻辑方式升级 

    逻辑方式升级其实就是通过逻辑备份工具(例如mysqldump工具)将数据库、表、其他相关对象及数据逻辑备份成SQL脚本,再将其还原至MySQL5.7的实例中。

    详细步骤如下:

    1.1  备份数据库

    当前数据库的版本为MySQL5.6.27,现在准备备份

     因为库比较小,因此使用mysqldump进行备份即可。mysqldump备份的方法可以参考历史文章进行了解 

    MySQL数据备份及还原(一)https://mp.weixin.qq.com/s/JbLThtgUq5RjkCuztSgBJg 

    或 https://www.cnblogs.com/gjc592/p/12505347.html

    备份脚本:

    /*  备份所有库及相关对象 */
    /usr/local/mysql/bin/mysqldump -uroot -p  
    --socket=/app/data/mysql3307/tmp/mysql.sock  --master-data=2 --default-character-set=utf8  --routines   --triggers --events --flush-logs --flush-privileges --single-transaction  --all-databases   > all_db.sql
    

    1.2  部署一套MySQL5.7实例

    MySQL5.7 的部署历史文章里也有,如果不太熟悉的同学可以参考如下链接文章

    MySQL5.7安装https://mp.weixin.qq.com/s/fbp-3hpMxrCc7R3_HQTchA 

    或 https://www.cnblogs.com/gjc592/p/9203711.html

    安装过程比较简单,本文不再赘述。

    1.3  数据导入MySQL5.7

    将备份的MySQL5.6的数据导入到MySQL5.7 中即可。

    1.4 应用场景

    • 数据量小的情况下使用,此方式通常不会失败

    • 在跨大版本升级的时候使用较多,例如,从MySQL5.6(或更低版本)直接升级到8.0版本

    • 不同MySQL分支之间升级

     

    02

       原地升级方式 

    使用mysql_update方式原地升级时,时间相对较快,尤其是数据库体量较大时,此方式可以原地直接升级。

    步骤如下:

    2.1  下载MySQL5.7

    下载需要升级到的版本的数据库,例如本次升级到MySQL5.7.25-28版本(percona分支),则下载对应安装包,解压后配置软连接

    2.2  修改配置文件

    因MySQL5.6 的部分参数再MySQL5.7 中已经废弃或者默认值发生变化,另外也为了使用MySQL5.7的新特性,需要添加对应的参数配置,例如:

    • sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION   # 保持和MySQL5.6一致

    • innodb_large_prefix =OFF                                         # 保持和MySQL5.6 一致

    • log_timestamps=SYSTEM            # 新增参数,如果不添加,默认日志里采用UTC时间格式记录,我们看上去可能不太方便

    • secure_file_priv=/tmp                  # MySQL5.7对安全性做了很多提升,此参数不配置的话默认无法使用load file 及ELECT …OUTFILE等

    • character_set_server= utf8         # 虽然建议使用utf8mb4字符集,但是如果需要保持和原库一致,需要指定

    当日,还有很多新特性的参数需要调整,在此不再一一列举,需要的同学直接联系我 或者参考历史文章配置即可

    2.3 关闭MySQL5.6 实例

    MySQL5.6的关闭可以使用停止服务的方式,也可以通过命令行方式,命令如下:

    /*  mysql5.6 关闭实例的方式需要使用mysqladmin */
    /usr/local/mysql/bin/mysqladmin  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p shutdown
    

    建议:生产环境中,如果可以使用此方式升级,强烈建议先直接冷备一下整个数据库的数据目录,已防止升级失败等情况出现。

    2.4  使用MySQL5.7 启动原库

    此时需要用MySQL5.7来启动数据库,启动后日志里会有一些报错信息。

    启动数据库

    /usr/local/mysql5.7/bin/mysqld_safe  --defaults-file=/app/data/mysql3307/etc/my.cnf &
    

    日志里内容如下,出现很多错误,其中也提示到需要使用mysql_upgrade进行修复:

    2.5  升级数据库

    MySQL升级工具是mysql_upgrade,错误日志里也提到了使用mysql_upgrade进行修复相应的错误。升级的方法如下:

    /*  升级系统库及业务库 */
    /usr/local/mysql5.7/bin/mysql_upgrade  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p
    

     如果只需要升级系统库,则加-s参数;如果升级过程中有错误或者中断后想再次升级 可以添加--force参数强制升级

    /*  只升级系统库 */
     /usr/local/mysql5.7/bin/mysql_upgrade  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p   -s
    /*  强制升级 */
     /usr/local/mysql5.7/bin/mysql_upgrade  --socket=/app/data/mysql3307/tmp/mysql.sock    -uroot -p   --force
    

    2.6 后续工作

    升级完成后建议再进行以下工作

    • 重启数据库,以便所有功能生效;且重启后再次查看数据库日志

    • 修改环境变量及软连接,以便默认使用MySQL5.7的相关命令

    附: 升级后数据库启动日志

    2.7  使用场景

    相同大版本之间的小版本升级

    数据量较大,提前测试过两个版本之间可以原地升级时再用。

     

    03

       小结 

    MySQL的逻辑升级及mysql_upgrade的原地升级都有各自的应用场景。但是无论用哪种方式,都要注意以下几点:

    a)   在生产环境上进行升级操作之前一定需要先在测试环境中多次进行相同版本的升级测试工作;

    b) 实际工作中,测试环境升级成功后需要经过相关业务的回归测试,确保相关功能升级后能正常使用后再在生产环境进行升级,建议测试环境进行1个月以上的测试

    c)   生产环境升级前一定要进行备份

    d)   生产环境的升级顺序建议是先升级从节点,再升级主节点或进行主从切换

     

    以上就是MySQL5.6升级至MySQL5.7的2种主要方式,升级到MySQL8.0方法相同,但有些参数细节需要修改,大家可以自行测试。如有问题、建议或想投稿及合作的,欢迎与我沟通(公众号:数据库干货铺)。

    为了与更多的朋友沟通,现已开通新的技术交流群,欢迎同学们扫码或公众号后台回复 “加群” 联系管理员加入,谢谢。

    往期精彩回顾

    1.  升级python,就是这么简单

    2.  mysql8.0新增用户及加密规则修改的那些事

    3.  比hive快10倍的大数据查询利器-- presto

    4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

    5.  PostgreSQL主从复制--物理复制

    6.  MySQL传统点位复制在线转为GTID模式复制

    7.  MySQL敏感数据加密及解密

    8.  MySQL数据备份及还原(一)

    9.  MySQL数据备份及还原(二)









    展开全文
  • 参考文档:https://blog.csdn.net/watermelonbig/article/details/52973487
  • mysql数据库命令大全日常维护工具

    千次阅读 2018-09-30 14:58:16
    MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,其中字符集用来定义MySQL数据字符串的存储方式,而校对规则定义比较字符串的方式 2:MySQL数据库常见字符集介绍 选择字符集建议使用...

    一:MySQL字符集

    1:字符集介绍

    字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASC2!MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,其中字符集用来定义MySQL数据字符串的存储方式,而校对规则定义比较字符串的方式

    2:MySQL数据库常见字符集介绍


    选择字符集建议使用国际标准的utf8

    3:MySQL怎样选择合适的字符集

    1、如果处理各种各样的文字,发布到不同语言国家地区,应选Unicode字符集,对MySQL来说就是utf8(每个汉字三个字节)
    2、如果只是需要支持中文,并且数据量很大,性能要求也高,可选GBK(定长,每个汉字占双字节,英文也占双字节),如果是大量运算,比较排序等,定长字符集更快,性能也高
    3、处理移动互联网业务,可能需要使用utf8mb4字符集,apple

    4:查看当前MySQL支持的字符集

    MySQL可以支持多种字符集,同一台服务器,库或表的不同字段都可以指定不同的字符集
    mysql -uroot -p123456 -e "show character set \G;"  查看所有的字符集

    查看常用的字符集:
    mysql -uroot -p123456 -e "show character set\G;" |egrep "gbk|utf8|latin1"|awk '{print $0}'

    5:查看MySQL当前的字符集设置情况

    mysql> show variables like 'character_set%';

    6:实战,迁移数据

     背景:公司业务数据book,由于之前建表没注意字符集的问题,导致之前写入的数据出现乱码。现在要将之前的数据和现在数据的字符集一致,不出现乱码情况
    将字符集为latin1已有记录的数据转成utf8,并且已经存在的记录不乱码

    步骤
                     1:建库及建表的语句导出,sed批量修改为utf8
                     2:导出之前所有的数据
                     3:修改mysql服务端和客户端编码为utf8
                     4:删除原有的库表及数据
                     5:导入新的建库及建表语句
                     6:导入之前的数据

    1):导出表结构
            mysqldump –uroot   --default-character-set=latin1 -d book2> booktable.sql

    2):编辑booktable.sql 将latin1修改成utf8
            vim booktable.sql 修改所有latin1为utf8

    3):确保数据库不再更新,导出所有数据
            mysqldump  -uroot –p123456 --quick --no-create-info --extended-insert --default-character-set=latin1 book2>bookdata.sql
     
    参数说明:
    --quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出当前cache到内存中
    --no-create-info:不要创建create table语句
    --extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会非常快
    --default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码

    4):打开bookdata.sql 将SET NAME latin1 修改成SET NAME utf8
                     vim bookdata.sql
                     /*!40101 SET NAMES utf8 */;

    5):重新建库
            mysql> create database book2 default charset utf8;

    6):建立表,导入我们之前导出的表的数据库
            mysql –uroot –p123456 book <booktable.sql

    7):导入数据
            mysql -uroot -p123456 book2 <bookdata.sql

            注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据

    二:MySQL日常维护

    1:mysqlcheckà mysql修复工具

    mysqlcheck客户端工具可以检查和修复MyISAM表,还可以优化和分析表。
    实际上,它集成了mysql工具中check、repair、analyze、tmpimize的功能。
    /usr/local/mysql/bin/mysqlcheck   #源码编译安装位置
    rpm -qf `which mysqlcheck`  yum安装查看
     
    参数选项:
    mysqlcheck –-help 查看帮助
    -c, --check (检查表);
    -r, --repair(修复表);
    -a, --analyze (分析表);
    -o, --tmpimize(优化表); //其中,默认选项是-c(检查表)
    -u, 使用mysql中哪个用户进行操作

     Mysqlcheck使用语法:
    使用以下3种方式来调用mysqlcheck:
    mysqlcheck[tmpions] db_name [tables]
    mysqlcheck[tmpions] ---database DB1 [DB2 DB3...]
    mysqlcheck[tmpions] --all--database
    如果没有指定任何表或使用---database或--all--database选项,则检查整个数据库。

    举例说明:
    1:检查表(check)
    mysqlcheck -uroot -p123456 -c book books


    2:修复表(repair)
    mysqlcheck -uroot -p123456 -r book books


    3:修复指定的数据库
    mysqlcheck -uroot -p  -r --database book


    扩展: 修复文件系统。 容易掉失数据
    fsck -y -f /dev/sdaX

    4:检查修复所有数据库
    mysqlcheck -uroot -p -A –r    

        
    参数-A 等于  --all-databases  

    5:每天定时对mysql数据库进行优化
    使用计划任务
    crontab –e
    #0 1 * * * mysqlcheck -A -o -r  -u你的用户名 -p你的密码 > /dev/null 2>&1
    0 3 * * *  mysqlcheck -uroot -p123456 -r -o -A > /dev/null 2>&1 每天3点优化
     

    2:MySQL备份恢复

    1)MySQL备份的类型

     

    按照备份时对数据库的影响范围分为:

    • Hot backup(热备)  Cold Backup(冷备)Warm Backup(温备)
    • Hot backup:指在数据库运行中直接备份,对正在运行的数据库没有任何影响。(Online Backup)官方手册为在线备份
    • Cold Backup:指在数据库停止的情况下进行备份(OfflineBackup) 官方手册称为离线备份
    • Warm Backup:备份同样在数据库运行时进行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性


    按照备份后文件内容:

    逻辑备份 -->
    指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句,或者是表内的实际数据,如mysqldump和SELECT * INTO OUTFILE的方法,一般适用于数据库的升级和迁移,恢复时间较长

    裸文件备份-->
    拷贝数据库的物理文件,数据库既可以处于运行状态(mysqlhotcopy 、ibbackup、xtrabackup这类工具),也可以处于停止状态,恢复时间较短。

    按照备份数据库的内容来分,又可以分为:

    • 完全备份:对数据库完整的备份
    • 增量备份:在上一次完全备份基础上,对更新的数据进行备份(xtrabackup)
    • 日志备份:二进制日志备份,主从复制

    2)逻辑备份工具mysqldump

    使用的时候MySQL当要导入或者导出数据量大的库的时候,用PHPMYADMIN甚至MySQL Administrator这些工具都会力不从心,这时只能使用MySQL所提供的命令行工具mysqldump进行备份恢复。数据量大的时候不推荐使用,可支持MyISAM,InnoDB

    MySQL数据的导出和导入工具:mysqldump

    导出数据:
    语法: mysqldump [TMPIONS] database [tables] >导出的文件名.sql

    A:导出所有数据库
    mysqldump -uroot -p123456 -A >all.sql
    mysqldump -uroot -p123456 --all-databases >all2.sql

    参数-A代表所有,等同于—all-databases

    B:导出某个数据库
    mysqldump -u 用户名 -p 数据库名 > 导出的文件名.sql  # 注意是-p空格后是数据库名,不是密码。
    mysqldump -uroot -p123456 book >book.sql
    vim book.sql

    C:导出单张表
    mysqldump -uroot -p123456 book books >books.sql  #导出book库books表

    D:导出库的表结构
    mysqldump -uroot -p123456 -d book>booktable.sql  #只导出book库的表结构

    E:只导出数据
    mysqldump -uroot -p123456 -t book>bookdata.sql  #只导出book库中的数据

    F:导出数据库,并自动生成库的创建语句
    mysqldump -uroot -p123456 -B book2 >book2.sql
    mysql -uroot -p123456 < book2.sql  导入不用指定数据名

    导入数据:
    A:导入所有数据库
    mysql -uroot -p123456 <all.sql

    B:导入数据库
    Mysql -uroot -p123456 book <book.sql  #如果导入时,没有对应的数据库,需要你手动创建一下:mysql> create database book;
    使用source导入
    mysql> create database book;
    mysql> use book;
    mysql> source /root/book.sql
     
    c:导入表
    mysql> drop table books;
    mysql> source /root/books.sql;   ##导入表时,不需要重新,创建表。要先进到相应的数据库中
    mysql> select * from books;

    D:导入表结构和数据
    mysql> create database book;
    mysql -uroot -p123456 book<booktable.sql
    mysql -uroot -p123456 book<bookdata.sql

    3) mysqlhotcopy-à裸文件备份    --5.7版本已经去掉此命令,请在5.5以下测试

    mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能用于备份MyISAM存储引擎和运行在数据库目录所在的机器上.与mysqldump备份不同,mysqldump属于逻辑备份,备份时是执行的sql语句.
    Mysqlhotcopy本质是使用锁表语句后再使用cp或scp拷贝数据库
    1.安装mysqlhotcopy所依赖的软件包(perl-DBD)
    yum install perl-DBD* -y

    2.查看mysqlhotcopy帮助信息:
    mysqlhotcopy –help
      --allowold   don't abort if target dir already exists (rename it _old) --不覆盖以前备份的文件
      --addtodest  don't rename target dir if it exists, just add files to it      --属于增量备份
       --noindices   don't include full index files in copy          --不备份索引文件
       --debug     enable debug                                 --启用调试输出
        --regexp=#   copy all databases with names matching regexp  --使用正则表达式
        --checkpoint=#  insert checkpoint entry into specified db.table    --插入检查点条目
      --flushlog      flush logs once all tables are locked          --所有表锁定后刷新日志
      --resetmaster    reset the binlog once all tables are locked     --一旦锁表重置binlog文件
      --resetslave  reset the master.info once all tables are locked  --一旦锁表重置master.info文件
     
    举例说明:
    A:备份一个数据库到一个目录中
    mysqlhotcopy -u root -p 123456 book /tmp  #-u –p 后面都有空格


    对比下大小
    [root@xuegod70 ~]# du -h /tmp/book/ /var/lib/mysql/book
    48K /tmp/book/
    48K /var/lib/mysql/book

    B:备份多个数据库到一个目录
    mkdir /tmp/book-mysql
    mysqlhotcopy -u root -p 123456 book mysql /tmp/book-mysql
    Flushed 24 tables with read lock (`book`.`books`, `book`.`category`, `mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`event`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`ndb_binlog_index`, `mysql`.`plugin`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`proxies_priv`, `mysql`.`servers`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds.
    Locked 0 views () in 0 seconds.
    Copying 7 files...
    Copying indices for 0 files...
    Copying 72 files...
    Copying indices for 0 files...
    Unlocked tables.
    mysqlhotcopy copied 26 tables (79 files) in 0 seconds (0 seconds overall).


    C:备份数据库中的某个表
    语法:mysqlhotcopy -u 用户 -p 密码 数据库名./要备份的表名/  要备份的路径
    mkdir /tmp/books
    mysqlhotcopy -u root -p 123456 book./books/ /tmp/books/   #注意 / 一定要


    实际上是把对应的表文件复制到/tmp目录下


    D:恢复数据
    首先我们破坏数据
    rm -rf /usr/local/mysql/data/book/


    开始恢复
    cp -ra /tmp/book/ /usr/local/mysql/data/
    ll -d /usr/local/mysql/data/book/
    drwxr-x--- 2 mysql mysql 4096 Nov  9 17:28 /usr/local/mysql/data/book/
     





    总结:
    mysqldump和mysqlhotcopy的比较:
    1、mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,数据库大时,占用系统资源较多,支持常用的MyISAM,innodb
    2、mysqlhotcopy只是简单的缓存写入和文件复制的过程,占用资源和备份速度比mysqldump快很多很多。特别适合大的数据库,但需要注意的是:mysqlhotcopy只支持MyISAM 引擎
    3、mysqlhotcopy只能运行在数据库目录所在的机器上,mysqldump可以用在远程客户端。
    4、相同的地方都是在线执行LOCK TABLES 以及 UNLOCK TABLES
    5、mysqlhotcopy恢复只需要COPY备份文件到源目录覆盖即可,mysqldump需要导入SQL文件到原来库中。
     

    实战:写个自动备份MySQL数据库shell脚本

    Vim  mysql-autoback.sh
    #!/bin/bash  
    export LANG=en_US.UTF-8 
    savedir=/database_back/  
    cd "$savedir" 
    time="$(date +"%Y-%m-%d")" 
    mysqldump -u root -p123456 book > book-"$time".sql 
    再添加计划任务就ok
     
     

    xtrabackup备份工具使用

    1、xtrabackup简介

     

    Xtrabackup包括两个主要工具:Xtrabackup和innobackupex:
    Xtrabackup只能备份InnoDB和XtraDB两种引擎表,而不能备份MyISAM数据表。
    innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表。Xtrabackup做备份的时候不能备份表结构、触发器等等,智能区分.idb数据文件。另外innobackupex还不能完全支持增量备份,需要和xtrabackup结合起来实现全备的功能
     

    我们知道,针对InnoDB存储引擎,MySQL本身没有提供合适的热备工具,ibbackup虽是一款高效的首选热备方式,但它是是收费的。好在Percona公司给大家提供了一个开源、免费的Xtrabackup热备工具,它可实现ibbackup的所有功能,并且还扩展支持真正的增量备份功能,是商业备份工具InnoDB Hotbackup的一个很好的替代品。

    2、xtrbackup 安装 (mysql5.7.20需安装最新版XtraBackup2.4.9)

    下载安装包
     [root@xuegod70 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar

    解压包
    [root@xuegod70 ~]# tar -xvf Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar

    Yum安装并解决依赖:
    yum -y install percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
     
    注意:安装完成以后记得更改你的/etc/my.cnf配置文件制定数据目录,因为Xtrabackup是根据你的/etc/my.cnf配置文件来获取你备份的文件,比如在/etc/my.cnf的[mysqld] 下添加

    datadir=/usr/local/mysql/data,然后重启mysql
    [root@xuegod70 ~]# vim /etc/my.cnf
    在mysqld的范围添加
    [mysqld]
    datadir=/usr/local/mysql/data
    [root@xuegod70 ~]# systemctl restart mysqld    #重启msyql

    3、xtrbackup使用

    我们一般使用innobackupex脚本
    innobackupex是perl脚本对xtrabackup的封装,和功能扩展。
    备份准备工作:
    权限和链接
    xtrabackup需要连接到数据库和datadir操作权限。
    xtrabackup或者innobackupex在使用过程中涉及到2类用户权限:
    1.系统用户,用来调用innobackupex或者xtrabackup
     

    连接到服务:innobackupex或者xtrabackup通过—user和—password连接到数据库服务
    $ innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/
    $ innobackupex --user=LUKE  --password=US3TH3F0RC3 --stream=tar ./ | bzip2 -   压缩
    $ xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/

    2.数据库用户,数据库内使用的用户
     

    需要的权限:连接到服务是为了执行备份,需要在datadir上有read,write和execute权限。在数据库中需要以下权限:
    RELOAD和LOCK TABLES权限为了执行FLUSH TABLES WITH READ LOCK   。
     REPLICATION CLIENT为了获取binary log 位置
     CREATE TABLESPACE权限为了导入表,用户表级别的恢复
    SUPER权限在slave环境下备份用来启动和关闭slave线程


    其他连接选项

    TmpionDescription
    –portThe port to use when connecting to the database server with TCP/IP.
    –socketThe socket to use when connecting to the local database.
    –hostThe host to use when connecting to the database server with TCP/IP.


    可以单独创建用来备份数据库的用户,安全,并赋予对应的权限

    4、全备和全备还原

    使用innobackupex创建全备

    创建全备:
    innobackupex --user=root --password=123456 /tmp/db_backup/
    innobackupex --user=root --password=123456 /tmp/db_backup/ 2>>/tmp/db_backup/db_backup.log
    2>>/tmp/db_backup/db_backup.log   #不显示输出信息,输出信息重定向到db_backup.log
     

     

    内部机制:在备份的时候innobackupex会调用xtrabackup来备份innodb表,并复制所有的表定义,其他引擎的表(MyISAM,MERGE,CSV,ARCHIVE)。
    其他选项:
    --no-timestamp,指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹。
    --default-file,指定配置文件,用来配置innobackupex的选线
    innobackupex --user=root --password=123456 --no-timestamp /tmp/db_backup/full
    innobackupex --user=root --password=123456 --no-timestamp /tmp/db_backup/full (使用--no-timestamp时,后面的这个full目录必须跟上且不能提前自己建立,它由innobackupex自动建立,否则会报错innobackupex: Error: Failed to create backup directory)

    使用innobackupex还原备份

    使用innobackupex --copy-back来还原备份
    停止mysql:
    Systemctl stop mysqld
    删除数据:(危险动作):
    rm -rf /var/lib/mysql/*

    还原:
    [root@xuegod70 ~]# innobackupex --copy-back /tmp/db_backup/2017-12-11_23-20-17/  


    ll /usr/local/mysql/data/  查看权限

    重新授权
    chown -R mysql:mysql /var/lib/mysql/   要不然mysql启动不起来
    systemctl restart mysqld

    注:datadir必须是为空的,innobackupex –copy-back不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到datadir。

    5:创建增量备份和还原

    增量备份作用:减少备份数据重复,节省磁盘空间,缩短备份时间
    增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN<日志序列号>之后的所有数据页。

    创建增量备份

    1:首先创建全备
    在创建增量备份之前需要一个全备,不然增量备份是没有意义的。
    innobackupex --user=root --password=123456 /tmp/db_backup/
    这样就会在/tmp/db_backup下创建一个时间戳文件夹 2017-12-11_23-20-17,文件夹下就是备份文件
    检查备份文件夹下的xtrabackup-checkpoints,查看信息
    cat /tmp/db_backup/2017-12-11_23-20-17/xtrabackup_checkpoints
    backup_type = full-backuped #全备的意思
    from_lsn = 0
    to_lsn = 1600459
    last_lsn = 16004592:创建第一个增量备份
    首先我插入一些数据到表里面
    mysql> use test;
    mysql> insert into test2 (name) values('HA');
     
    2. 使用—incremental创建增量备份
    innobackupex --user=root --password=123456 --incremental /增量1路径 --incremental-basedir=全备路径  后面指定这哪个全备上进行增量备份
    [root@xuegod70 mysql]# innobackupex --user=root --password=123456 --incremental /tmp/db_backup/ --incremental-basedir=/tmp/db_backup/2017-12-11_23-20-17/
    再查看LSN<日志序列号>
    [root@xuegod70 mysql]# cat /tmp/2017-12-11_23-58-17/xtrabackup_checkpoints
    backup_type = incremental
    from_lsn = 1600459
    to_lsn = 1601301
    last_lsn = 1601301

    3:增量备份创建的替代方法
    可以使用指定—incremental-lsn来代替—incremental-basedir的方法创建增量备份。
    innobackupex --user=root --password=123456 --incremental /tmp/db_backup/ --incremental-lsn=1600459  #从这个编号点开始备份

    注意:xtrabackup只会影响xtradb或者innodb的表,其他引擎的表在增量备份的时候只会复制整个文件,不会差异。

    测试:
    停止mysql,删除数据rm –rf /var/lib/mysql/* 

    还原增量备份

    增量备份的恢复比全备要复杂一点,第一步是在所有备份目录下重做已提交的日志,如:
    innobackupex --apply-log --redo-only BASE-DIR 
    innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1 
    innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2 
    注意:如果仅有一份增量备份,第2条语句忽然
    其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。
    这里要注意的是:最后一步的增量备份并没有--redo-only选项!
    以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。
    第一步完成之后,我们开始第二步:回滚未完成的日志:
    innobackupex --apply-log BASE-DIR
    上面执行完之后,BASE-DIR里的备份文件已完全准备就绪,最后一步是拷贝:
    innobackupex --copy-back BASE-DIR
    恢复mysql权限 chown –R mysql.mysql /var/lib/mysql/
    最后启动systemctl start mysqld
    检验数据是否恢复正常

    6:提示

    这款工具很强大,更多的地方还要各位自己去摸索
    官方有手册可以下载

    官方文档可以参考:
    https://www.percona.com/doc/percona-xtrabackup/2.4/index.html

    展开全文
  • MAC下升级MySQL数据库

    千次阅读 2017-09-24 17:44:15
    2.在设置中关闭MySQL数据库 3.开始安装数据库正常安装即可),安装好之后打开利用Spotlight打开/usr/local文件夹,就会看到两个版本的mysql数据库,这两个文件中都有data,还有mysql指针这个文件夹 4.首先将新版本...

    1. 首先到官网下载比较最新版本的MySQL
    2.在设置中关闭MySQL数据库
    3.开始安装数据库正常安装即可),安装好之后打开利用Spotlight打开/usr/local文件夹,就会看到两个版本的mysql数据库,这两个文件中都有data,还有mysql指针这个文件夹
    4.首先将新版本中的data文件夹重命名为dataold,

    sudo mv 新版本路径/data  新版本路径/dataold

    5.将老版本中的data文件夹复制到新版本中

    sudo cp -rf  老版本路径/data   新版本路径

    6.然后设置正确的权限

    sudo chown -R  _mysql /usr/local/mysql-5.7.19-osx10.12-x86_64/data //后面跟的是新版本中data的路径

    7.启动Mysql 修复数据库

    sudo /usr/local/mysql/support-files/mysql.server start

    8.运行升级程序

    /usr/local/mysql/bin/mysql_upgrade -u username -p 
    //输入你原来数据库的用户名和密码 ,如果先前设置了环境变量直接输入mysql_upgrade 即可,别忘了用户名和密码

    9.重启mysql数据库

    sudo /usr/local/mysql/support-files/mysql.server restart

    10.查看版本号

    mysql -u username -p
    展开全文
  • 之前做了一个备份工具,后来客户数据库升级mysql8.0之后,备份出警告导致后续流程进行不了。警告是“mysql: [Warning] Using a password on the command line interface can be insecure”大意是在执行语句里带...

    之前做了一个备份工具,后来客户数据库升级到mysql8.0之后,备份出警告导致后续流程进行不了。警告是“mysql: [Warning] Using a password on the command line interface can be insecure”大意是在执行语句里带密码不安全,上网找了解决办法,使用命令mysql_config_editor

    mysql_config_editor出现在mysql5.6.6以后的版本,可以给指定的连接和密码生成一个加密文件.mylogin.cnf,默认位于当前用户目录下。通过该文件可以使用mysql、mysqladmin等直接登录,避免明文密码出现在脚本中。

    1.设置命令生成文件,如果不指定路径,默认路径就是【client】,执行命令mysql_config_editor set --password,回车之后输入密码。如果有路径,命令就是mysql_config_editor set --login-path=hidepd --password。

    2.执行命令的时候加上路径就ok了mysqldump --login-path=client -uroot dbname <D:\data\dbname 1512.sql

    还能通过命令mysql_config_editor print --all查看已经设置的路径,通过命令mysql_config_editor remove --login-path=hidepd 删除不用的路径。

    设置之后问题解决,但是以后修改数据库密码还需要重新生成文件,这个是比较麻烦的地方。暂时还没找到更好的解决办法。

    展开全文
  • 但是,美中不足,phpstudy直至2018版本,其中使用的mysql...很多人都疑惑该如何升级数据库,而且百度搜索中的大部分方法都很复杂而且不是很实用。下面我就把我升级mysql5.7.18的过程晒出来,跟大家分享。 1.从my...
  • 环境:Linux、MySQL主要步骤:1、把数据库权限导出2、导出整个库3、备份原数据库4、安装新数据库版本5、恢复权限及整个库1、把数据库权限导出将pt-show-grants文件放到/data/mysql_data目录下,进到/data/mysql_data...
  • phpstudy升级mysql数据库

    万次阅读 2016-10-27 20:57:57
    因为mysql支持全文索引的只有5.6以上,而我下的phpstudy只有5.5的版本,在导入数据库的时候因为该数据库的表内有使用全文索引,因此必须升级phpstudy的mysql版本,这里就把自己当升级过程详细记录和总结一下。...
  • shell连接mysql数据库操作

    千次阅读 2020-05-17 12:57:31
    mysql -u USERNAME -p PASSWORD DATABASENAME <<EOF 2>/dev/null show databases; use msyql; select * from user; quit EOF 规范的shell脚本连接数据库语句如下: #!/bin/bash #Date:11:1
  • 深入浅出MySQL数据库开发、优化与管理维护

    千次下载 热门讨论 2014-01-21 15:48:01
     24.3 升级MySQL   24.4 MySQL降级   24.5 小结   第25章 MySQL中的常用工具   25.1 mysql(客户端连接工具)   25.1.1 连接选项   25.1.2 客户端字符集选项   25.1.3 执行选项   25.1.4 ...
  • 数据库是什么 数据库管理系统,简称为DBMS(Database Management System),是用来存储数据的管理系统。 DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 实现读取自动化需要编程技术能力 无法应对...
  • MYSQL 5.7 数据库备份与恢复

    千次阅读 2020-08-31 17:33:26
    数据库备份与恢复MySQL 数据库备份概述备份的重要性备份类型 MySQL 数据库备份 概述 备份的主要目的是灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审 计等。 备份的重要性 在企业中数据的价值至关...
  • CentOS7环境mysql小版本升级步骤,本文介绍的是替换二进制文件升级方式的升级步骤,步骤展示的是5.7.26升级至5.7.31的升级步骤,操作系统为centos7.4。
  • 本方案是因为在工作中遇到的一个mysql主从功能配置的问题所引起的。有一个处在从位置上的mysql是5.1版本的,从5.1到5.6的mysql各种系统...于是评估各种利弊后,决定升级5.1的数据库版本至5.6.26 。 拿mysql5.1作为5.
  • 数据库MySQL详解

    万次阅读 多人点赞 2018-07-24 20:03:47
    全网最详细MySQL教程,2021.1再次更新70%的内容,MySQL 8.0 + Navicat 15
  • MYSQL数据库安全加固

    2020-08-19 10:06:43
    MYSQL数据库加固 数据库存放位置检查 ​ > 数据库文件不可以存放在 /,/var,/usr目录内 ​ > 连上mysql数据,mysql -uroot -p --回车输入密码 ​ > select @@datadir; ​ 或 ​ > show variables where...
  • 高可用MySQL数据库之PXC集群

    千次阅读 2021-01-08 08:38:03
    高可用MySQL数据库之PXC集群 文章目录前言一、pxc介绍**PXC优缺点****优点:****缺点:**二、PXC安装1. 在3台主机上配置swarm2. 创建swarm网络3. 下载PXC镜像4. 创建数据库存储卷5. 安装第一个节点6. 加入其他节点...
  • MySQL数据库的性能优化总结

    万次阅读 多人点赞 2018-12-26 21:02:12
    数据库的优化方法: 1、设计符合范式的数据库; 2、选择合适的存储引擎; 3、SQL表结构、字段优化; 4、SQL语句优化与索引优化; 5、读写分离:主数据库负责写操作,从数据库负责读操作。 6、分库分表:垂直切分与...
  • GitHub 可谓各种神器都有,今天发现一个操作数据库的命令行工具,可以自动补全和语法高亮,以前在终端敲 SQL 的时候,你不仅要记住表名、字段名,各种函数都需要记住才能敲出一条完整的语句来,否则就是先 Google ...
  • MySQL数据库的版本更新方法

    千次阅读 2018-10-18 15:34:00
    MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的MySQL变得更美好,我们有必要去给它升级,尽管你会说它现在已经跑得很好很稳定完全够用了。下面我们来...
  • MYSQL数据库原理与应用-个人总结(上)

    千次阅读 多人点赞 2020-12-26 20:18:40
    此复习为个人整理的有关MySql的复习,大量知识点来自老师上课复习、个人总结、以及部分网上资料,以便能够提供给自己复习时的内容。此资料含有大量的执行语句,并且每一条都是自己亲自试验,只得没问题之后才敢放...
  • 实际项目中经常需要编写数据库升级脚本来做一些基本的表操作:如添加表、添加字段,修改字段等。由于环境部署会经常执行升级脚本,编写可重复执行的升级脚本就很重要。 基本思路是对表做操作前先判断表是否存在,对...
  • MySQL数据库测评

    千次阅读 2019-08-20 09:22:23
    a、对登录操作系统和数据库系统的用户进行身份标识和鉴别 测评方法 1、use mysql select user,password from user 所有user的password字段不为空 结果记录 #用户登录操作系统时需提供身份标识和鉴别信息。 b...
  • 前言100道MySQL数据库经典面试题解析,已经上传github啦https://github.com/whx123/JavaHome/tree/master/Java%E9%9D%A2...
  • MySQL Data数据恢复情景描述案例分析恢复思路解决方法如何恢复表结构 情景描述 服务器上原来安装了MySQL 5.7.x,且正在实时运行。后来由于菜鸟人员在服务器上安装了宝塔,并且重新安装了MySQL5.5.x 。导致原来的项目...
  • 墨墨导读:本文来自墨天轮用户投稿,详述MySQL 数据库崩溃(crash)的常见原因和解决办法,希望对大家有帮助。数据技术嘉年华,十周年盛大开启,点我立即报名!大会以“自研·智能·新基建...
  • MySQL数据库在线安装,更新升级

    万次阅读 2018-09-12 14:56:05
    在linux系统安装mysql,其他版本的yum 库安装方法参考mysql官方文档 https://dev.mysql.com/doc/refman/8.0/en/installing.html 安装时需要连接网络,关闭防火墙以及selinux mysql在线安装 方法一:下载...
  • mysql在linux下命令备份数据库

    千次阅读 2012-05-29 12:55:00
    mysql在linux下命令备份数据库2010-07-09 11:25如果机子上装有mysql,可以直接输入mysql进入。 1:打开的数据库命令 mysql&gt; use mysql Database changed 2:查看数据库命令 mysql&gt; show ...
  • mysql数据库的锁有多少种,mysql中怎么加锁

    万次阅读 多人点赞 2019-03-03 15:09:45
    MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,192
精华内容 21,276
关键字:

升级mysql数据库的命令

mysql 订阅