| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL数据库维护管理与备份实战 -> 正文阅读 |
|
[大数据]MySQL数据库维护管理与备份实战 |
一、MySQL版本1、MySQL官方发行版MySQL是最流行的数据库,主要特点: 简单:MySQL使用很简单,任何稍微有IT背景的技术人员都可以无师自通地参照文档安装运行和使用MySQL,这几乎没有什么门槛。 开源:开源意味着流行和免费。 支持多种存储引擎:MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 支持高可用架构:MySQL自身提供的replication(主从复制)功能可以实现MySQL数据的实时备份。 2、Mysql存储引擎Mysql最常用的有两个存储引擎:MyISAM和 InnoDB MySQL4和5使用默认的MyISAM存储引擎。从MYSQL5.5开始,MySQL已将默认存储引擎从MyISAM更改为InnoDB。 两种存储引擎的大致区别表现在: 1)InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中出错还可以回滚还原,而MyISAM就不可以了。 2)MyISAM查询数据相对较快,适合大量的select ,可以全文索引,InnoDB适合频繁修改以及涉及到安全性较高的应用。 3)InnoDB支持外键,支持行级锁,MyISAM不支持。 4) MyISAM索引和数据是分开的,而且其索引是压缩的,缓存在内存的是索引,不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大。? 5) InnoDB可支持大并发请求,适合大量insert、update操作。 关于MyISAM与InnoDB选择使用: 1)如果应用程序一定要使用事务,毫无疑问要选择INNODB引擎。 2)如果应用程序对查询性能要求较高,就要使用MYISAM了。MYISAM拥有全文索引的功能,这可以极大地优化查询的效率。 3、Percona ?Server分支Percona Server由领先的MySQL咨询公司Percona发布。 Percona Server是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB。是最接近官方MySQL Enterprise发行版的版本。 Percona提供了高性能XtraDB引擎,还提供PXC高可用解决方案,并且附带了percona-toolkit等DBA管理工具箱。 4、MariaDBMariaDB由MySQL的创始人开发,MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 MariaDB提供了MySQL提供的标准存储引擎,即MyISAM和InnoDB,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。 5、如何选择综合多年使用经验和性能对比,线上业务系统首选Percona分支,其次是MYSQL版本,最后是MariaDB。 二、MySQL常用管理命令1、连接Mysql ?(客户端工具NaviCat、phpMyAdmin、MySQL-Front) 格式:
1)连接到本机上的MYSQL。 首先进入Mysql安装程序的bin目录下,再键入命令:
回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。 2)连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123,则键入以下命令:
3)退出MYSQL命令:
2、修改密码格式:
1)首先在Mysql安装目录下面的bin目录,然后键入以下命令:
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2)再将root的密码改为abc345:
3、增加新用户/授权用户注意:和上面不同,下面的因为是MYSQL命令行中的命令,所以后面都带一个分号作为命令结束符。 格式:
1)增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:
但这种权限增加的用户是十分危险的,如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录这台mysql数据库,并可对数据进行任意操作,解决办法是设置登录权限。 2)增加一个用户test2密码为abc,让它只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库。
如果你不想test2有密码,可以再执行下面这个命令将密码取消掉。
如果想给一个用户test2授予访问mydb数据库的所有权限,并且仅允许test2在192.168.11.121这个客户端ip登录访问,可执行如下命令:
4、数据库基础操作1)创建数据库 注意:创建数据库之前要先连接Mysql服务器。 命令:
创建数据库,并分配用户方法:
例1:建立一个名为abc的数据库
2)显示数据库 命令:
3)删除数据库 命令:
例如:删除名为 iivey的数据库
4)连接数据库 命令:
例如:如果iivey数据库存在,尝试存取它:
use语句可以通告MySQL把iivey数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的USE语句。 5、Mysql表操作1)创建数据表 命令:
2)删除数据表 命令:
例如:删除表名为 MyClass 的表
3)表插入数据 命令:
例如:在表MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为90.45, 编号为2 的名为Joan 的成绩为88.99, 编号为3的名为Wang的成绩为99.5。
4)查询表中的数据 1. 查询所有行 命令:
例如:查看表 MyClass 中所有数据
2. 查询前几行数据 例如:查看表 MyClass 中前2行数据
5)删除表中数据 命令:
例如:删除表 MyClass中编号为1的记录
6)修改表中数据 语法:
7)增加字段 命令:
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0.
8)修改表名 命令:
例如:在表MyClass名字更改为YouClass
三、MySQL两个重要日志文件1)错误日志 ,当mysql启动有问题的时候,我们需要借助这个日志进行排查。 2)慢日志 ,当业务出现慢或者超时的时候,我们需要观查mysql的慢日志是否过多。 mysql的错误日志: 删除掉数据,无法启动mysql,观察错误日志:
观察mysql错误日志:
重启观察日志。 mysql慢日志说明:
测试数据的添加:
mysql慢日志说明:
四、mysqldump备份数据库1)导出整个数据库 导出文件默认是存在:
2)导出一个表
3)导出一个数据库结构
含义:-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table。 4)带语言参数导出
案例: 1.?cmd导出sql文件
2. 导入sql文件 首先启动mysql数据库。 cmd 下输入:
然进入mysql的安装的bin目录下:
登录myslq。 然后输入:
后面为数据库的名称。 最后把要导入的sql文件根据本地导入:
3. 导入csv文件 首先要选中要导入的表。 通过Navicat客户端进入数据库,点击pr_pip_run表,右击然后选择导入向导: 选择.csv文件:? 选择要导入的文件,编码utf-8,之后点击下一步: 直接按照默认的跳过,下一步:? 时间分隔符,默认下一步:? 选择要导入的表pr_pip_run,点击下一步:? 选择栏位,手动对应的往下依次排就行了,然后默认下一步: 要把字段和字段相应的内容一一对应(参照下面的pr_pipe_run数据库中的内容),只需要按照已经排好的顺序依次往下选择即可,这样导入的时候才知道往哪个字段导入csv哪个对应的数据。 下面是测试表的: 选额新增,默认下一步:? 点击开始:? 出现successful后关闭即可。? 之后选中表点击刷新:? 数据已经全部导入了。? 五、Xtrabackup工具备份数据库1、Xtrabackup 简介Xtrabackup是由percona提供的mysql数据库备份工具,Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份,不会锁表 。 Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb、?xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构; innobackupex:是将xtrabackup进行封装的perl脚本,可以备份和恢复MyISAM表以及数据表结构。 Percona XtraBackup 2.4.11之后innobackupex与xtrabackup软连,故后期版本命令中移除了innbackupex。 #增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。 Xtrabackup与mysqldump区别: Xtrabackup属于物理备份,mysqldump属于逻辑备份。 物理备份缺点:跨平台性差(跨文件系统可能不能恢复),备份时间长,冗余备份,浪费存储空间。 mysqldump备份缺点:效率较低,备份和还原速度慢,锁表,且备份过程中,数据插入和更新操作被阻塞。 Xtrabackup占用的CPU与内存较少,消耗的IO相对较大,备份后的文件较大。 通过mysql自带的工具mysqldump进行逻辑备份和恢复,虽然可以节省磁盘空间,但是速度很慢。 2、安装xtrabackup工具包1. 几个percona官方yum源 2. 下载yum源 3. 安装yum源
4. 测试安装库
通过yum方式安装percona-xtrabackup:
3、Xtrabackup备份原理1. xtrabackup工具介绍 xtrabackup有两个主要的工具:xtrabackup、innobackupex。 xtrabackup只能备份InnoDB和XtraDB两种数据表,而且只有ibd文件,frm文件它不管,恢复时就需要DBA提供frm ,同时,xtrabackup做备份的时候不能备份表结构、触发器等等。 innobackupex是perl脚本对xtrabackup的封装和功能扩展。 innobackupex可以备份和恢复MyISAM、 InnoDB和XtraDB表以及frm文件,所以我们使用innobackupex来备份MySQL数据库。 需要注意的是:innobackupex在备份MyISAM表之前要对全库进行加READ LOCK,会阻塞写操作,若备份是在从库上进行的话会影响主从同步,造成延迟。对InnoDB表备份不会阻塞读写。 2. xtrabackup备份恢复过程 在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。 xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。 xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。 Innobackupex会启动xtrabackup,xtrabackup准备复制数据文件前,首选执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来,同时把MyISAM表数据刷到硬盘上,然后开始复制MyISAM数据文件,文件复制完成,最后释放锁。 以上就是xtrabackup的备份过程。 接下来是准备(prepare)过程。在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像MySQL刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了。 备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以MyISAM表数据与InnoDB表数据是同步的。类似Oracle的,InnoDB的prepare过程可以称为recover(恢复),MyISAM的数据复制过程可以称为restore(还原)。 4、利用xtrabackup进行完全备份1. innobackupex常用选项
2. 通过innobackupex 进行全备份的过程 1)创建备份用户
2)进行全库备份
使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间戳命名的目录中。 3)一个全备份例子
?/data/backup/full/是将备份存放的目录。 innobackupex或者xtrabackup通过--user和--password连接到数据库服务,--defaults-file指定mysql配置文件目录。 在备份的同时,innobackupex还会在备份目录中创建xtrabackup_checkpoints文件。 内容如下: ? ? ?
5、Innobackupex完全恢复数据库1.?Innobackupex完全备份Mysql原理 1. 首先会启动一个xtrabackup_log后台检测的进程,实时检测mysql redo的变化,一旦发现redo有新的日志写入,立刻将日志写入到日志文件xtrabackup_logfile中; 2. 复制innodb的数据文件和系统表空间文件idbdata1到对应的以默认时间戳为备份目录的地方; 3. 复制结束后,执行flush table with read lock操作; 4. 复制.frm,MYI,MYD文件; 5. 并且在这一时刻获得binary log 的位置; 6. 将表进行解锁unlock tables; 7. 停止xtrabackup_log进程; 2. 通过Innobackupex完全恢复数据库原理 全库恢复过程:这一阶段会启动xtrabackup内嵌的innodb实例,将xtrabackup日志xtrabackup_Log进行回放,将提交的事务信息变更应用到innodb数据或表空间,同时回滚未提交的事务。 3. Innobackupex完全恢复数据库案例 1)prepare数据库 在备份完成后,数据尚且不能直接用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务,而且备份过程中可能还有数据的更改动作,此时xtrabackup_logfile就可派上用场了。 xtrabackup会解析该文件,对事务已经提交但数据还没有写入的部分,进行redo重做;将已经写到数据文件,但未提交的事务通过undo进行回滚,最终使得数据文件处于一致性状态。 Prepare过程是通过使用innobakupex命令的 --apply-log 选项实现的:
成功后,这个完全备份就可以被用来还原数据库了。 prepare的过程,其实是读取备份文件夹中的配置文件,然后innobackupex重做已提交事务,回滚未提交事务,之后数据就被写到了备份的数据文件(innodb文件)中,并重建日志文件。 2)恢复数据库 使用innobackupex --copy-back来还原备份(recovery)
innobackupex会根据my.cnf的配置,将所有备份数据复制到my.cnf里面指定的datadir路径下。
注:datadir必须是为空的,innobackupex --copy-back不会覆盖已存在的文件,还要注意,还原时需要先关闭mysql服务,如果服务是启动的,那么就不能还原到datadir。 3)修改权限启动数据库 默认情况下是通过root用户恢复的数据,所以mysql数据文件夹目录是root权限,需要修改文件的所有者和权限:
最后启动数据库即可。 6、xtrabackup进行增量备份所谓的增量,一定是在已有全量的基础之上的,不然是没有任何意义的。innobackupex增量备份过程中的"增量"处理,其实主要是相对innodb而言,对myisam和其他存储引擎而言,它仍然是全拷贝(全备份)。 "增量"备份的过程主要是通过拷贝innodb中有变更的"页"(这些变更的数据页指的是"页"的LSN大于xtrabackup_checkpoints中给定的LSN)。增量备份是基于全备的,第一次增备的数据必须要基于上一次的全备,之后的每次增备都是基于上一次的增备,最终达到一致性的增备。增量备份的过程如下,和全备的过程类似,区别仅在第2步。 在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份是基于上一次的增量备份,以此类推。 全备份:
第一次增量备份:
第二次增量备份:
7、xtrabackup增量备份恢复增量备份的恢复大体为3个步骤: 1)恢复完全备份; 2)恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数); 3)对整体的完全备份进行恢复,回滚那些未提交的数据; ? 增量备份的恢复: 1)恢复完全备份(注意这里一定要加--redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)一个事务在前一个备份中没有提交,但可能在其后的备份中提交了,这种情况就需要--redo-only参数。
2)将增量备份1应用到完全备份
3)将增量备份2应用到完全备份(注意恢复最后一个增量备份时需要去掉--redo-only参数,回滚xtrabackup日志中那些还未提交的数据)
4)把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据:
5)把恢复完的备份复制到数据库目录文件中,赋权,然后启动mysql数据库,检测数据正确性
8、xtrabackup针对海量数据的备份优化使用流特性,需要指定--stream选项,使用tar备份:(推荐方法)
备份到远程主机:
可用参数:
提取tar流,需要加i参数:
9、通过xtrabackup进行mysql备份恢复综合案例1. 对mysql的cmsdb库进行备份
说明:
2. 此处可以写个脚本做备份(backup.sh)
3. 恢复数据 1) 先停止数据库
2) 解压
注:没有db ,需要mkdir /data/back_data/db/。 3) 恢复
4) 赋权
5) 重启数据库
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:34:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |