一.mysql日志概述 在mysql中,有4种不同的日志,分别是错误日志,二进制日志(binlog日志),查询日志,慢查询日志.这此日志记录着数据库在不同方面的踪迹(区别sql server里只有errorlog日志,并借助了dmv来做分析).接下来几篇里详细介绍这几种日志的作用和使用方法,利用这些日志做好维护和调优. 错误日志是mysql中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息.当数据库出现任何故障导致无法正常使用时,可以首先查…
1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间后回滚.系统默认值是50秒.用户可以根据业务自行设置.生产环境不推荐使用过大的 innodb_lock_wait_timeout 参数值. -- 查看事务超时时间 SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; 也可以对当前会话进行超时设置如: set…
一.概述 慢查询日志记录了所有的超过sql语句( 超时参数long_query_time单位 秒),获得表锁定的时间不算作执行时间.慢日志默认写入到参数datadir(数据目录)指定的路径下.默认文件名是[hostname]_slow.log,默认超时是10秒,默认不开启慢查询日志.下面查看慢日志的几个参数: -- 是否开启慢日志 SHOW VARIABLES LIKE 'slow_query_log'; -- 慢日志文件记录位置 SHOW VARIABLES LIKE 'slow_query_…
一.概述 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程,此日志对灾难时的数据恢复起着极其重要的作用. 1.1 日志的位置和格式 在my.cnf中可以查看log-bin的位置,mysqld将包含所有更新数据的sql命令写入日志文件,位置如下图所示: 下面通过环境变量来查看当前binlog位置和状态 -- 通过环境变量来查看位置 SHOW VARIABLES LIKE…
一.概述 mysql 提供了很多参数来进行服务器的设置,当服务第一次启动的时候,所有启动参数值都是系统默认的.这些参数在很多生产环境下并不能满足实际的应用需求.在这个系列中涉及到了liunx 服务器,我这里是centos7.4, mysql 5.7,Xshell6. 1. 查看mysql server参数 通过show variables和show status命令查看mysql的服务器静态参数值和动态运行状态信息.前者是在数据库启动后不会动态更改的值.比如缓冲区大小,字符集,数据文件名称等:…
一.binlog 二进制其它选项 在二进制日志记录了数据的变化过程,对于数据的完整性和安全性起着非常重要作用.在mysql中还提供了一些其它参数选项,来进行更小粒度的管理. 1.1 binlog-do-db=db_name 该选项告诉主服务器,当前db_name库会更新记录到二进制日志中,其它所有没有显示指定的数据库更新时不记录到二进制日志中. 1.2 binlog-ignore-db=db_name 该选项告诉主服务器,当前db_name库不会更新记录到二进制日志中,其它所有没有显示指定的数据…
一. innodb_flush_log_at_trx_commit 这个参数名称有个log,一看就是与日志有关.是指:用来控制缓冲区(log buffer)中的数据写入到日志文件(log file),以及日志文件数据刷新到磁盘(flush)的操作时机.对这个参数的设置值,可以对数据库在性能与数据安全之间,进行折中. 参数值解释: 当参数是0:日志缓冲数据会,每秒一次地写入到日志文件,并且把日志文件刷新到磁盘操作.该模式下在事务提交的时候,不会主动触发写入磁盘的操作. 当参数是1:每次事务提交时,…
从这篇开始,讲innodb存储引擎中,对于几个重要的服务器参数配置.这些参数以innodb_xx 开头. 1. innodb_buffer_pool_size的设置 这个参数定义了innodb存储引擎的表数据和索引数据的最大内存缓冲区大小,和myisam不同,myisam的key_buffer_size只缓存索引键,而innodb_buffer_pool_size是同时为数据块和索引块做缓存的.这个特性与oracle是一样的,这个值设得越高,访问表中数据需要的磁盘i/o就越少(物理I/O).在一…
一.key_buffer 上一篇了解key_buffer设置,key_buffer_size指定了索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度.通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理.比例key_reads /key_read_requests应该尽可能的低,至少是1:100,1:1000更好(理解为key_reads物理IO次数越少越好). -- 一共有Key_read_requests个索引请求,…
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限,在安装mysql时就要重视安全问题. (1) 锁定mysql用户. (2) 其它任何用户都采取独立的账号登录,管理员通过mysql专有用户管理mysql服务,或者通过 root su到mysql用户下进行管理. (3) mysql用户目录下,除了数据文件目录,其它文件和目录属主都改为root. 我本…
一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全备份文件的目录,还原到datadir目录下. xtrabackup --copy-back --target-dir=/data/backups/ 可以使用xtrabackup --move-back选项恢复备份.这个选项类似于xtrabackup --copy-back,唯一的区别是它将文件移动到…
一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrabackup Option 指南 选项名 说明 --apply-log-only 仅在准备备份时,执行重做阶段.这对于增量备份非常重要. --backup 做一个备份, 并把它放在xtrabackup——target-dir目录里 --binlog-info 此选项控制Percona XtraBack…
一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存储引擎是事务型(innodb)还是非事务型.两种不同的存储引擎备份方式在处理数据一致性方面是不太一样. (2) 确定使用全备份还是增量备份.增量备份是备份每天的增量日志,恢复时需要全备份加所有增量备份.这里与sql server的完整备份+日志备份或差异备份有点类似. (3) 可以考虑复制方法来做异…
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_id字段有索引,Cityname字段没有索引: 会话1 会话2 SET autocommit=0; SET autocommit=0; SELECT * FROM city WHERE city_id=14 AND Cityname='深圳' FOR UPDATE; city_id      cou…
接着上一篇sql优化来说 1. 定位执行效率较低的sql 语句 通过两种方式可以定位出效率较低的sql 语句. (1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_query_time秒的sql语句的日志文件,后面具体介绍. (2) 通过show processlist 实时定位线程状态,是否锁表等,下面简单演示下show processlist. -- 会话 1获取city 表锁 LOCK TABLE city READ; -- 会话2更新city表 ' 查看…
1 通过handler_read 查看索引使用情况 如果索引经常被用到 那么handler_read_key的值将很高,这个值代表了一个行被索引值读的次数, 很低的值表明增加索引得到的性能改善不高,索引并不经常使用. handler_read_rnd_next 的值高 则意味着查询运行低效,应该建立索引, 这个值表示在数据文件中读下一行的请求数,如果是正进行大量扫描 值会较高,一般是索引不正确或没有利用到索引. SHOW STATUS LIKE 'Handler_read%'; 2. 优化定期分…
一. 指定路径 在上一篇里,二进制包解压后,全部放入在/usr/local/mysql目录下,在安装时指定了基础目录和数据目录, --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data . --有些文件在安装,是没有指定路径,安装后默认分布如下: 错误消息文件和字符集文件(share/mysql). my.cnf(/etc/my.cnf). socket=/var/lib/mysql/mysql.sock. --my.cnf里的配置…
一.概述 上篇讲到的表的数据导出(select .. into outfile 或者mysqldump),这篇继续讲表的数据导入,导入也同样有二个方法,分别是load data infile... 和mysqlimport.本质是一样的,区别在于前者是mysql内部执行, 后者是mysql 外部执行. 1.  load data infile 方法1 -- 格式语法如下: load data [local] infile 'filename' info table tablename[optio…
一.  perror 错误代码查看工具   在mysql 的使用过程中,可能会出现各种各样的error.这些error有些是由于操作系统引起的,比如文件或者目录不存在等等,使用perror的作用就是解释这些错误代码的详细含义.  perror 使用方法如下:   例如:指定错误号30和60分别是指什么错误 在MYSQL系统出现故障或错误后,一般用户都会去看错误日志,而错误日志里一般都会发现这样的错误编号.这时我们就可以利用这个命令分析到底是哪里出问题了. 二 总结 在前面几章中讲到了常用的几个工…
概述 对于二进制安装,优点是可以安装到任何路径下,灵活性好,一台服务器可以安装多个mysql.缺点是已经绎过编译,性能不如源码编译得好,不能灵活定制编译参数.如果用户即不想安装最简单却不够灵活的RPM包,又不想安装复杂费时的源码包,那么已编译好的二进制包将是最好的选择. 一.步骤1: 解压glib包 -- 在 /usr/local 下创建一个mysql文件夹,用来存放 [root@hsr local]# mkdir mysql [root@hsr local]# ls bin etc games…
一.概述 mysql可以在多个平台上运行,在windows平台上安装有noinstall包和图形化包二种方式.在linux/unix平台上有RPM包安装,二进制包(Binary Package)安装,源码包(Source package)安装. 对于RPM包的最大优点是安装简单,适合初学者学习使用,但安装路径不灵活,默认路径不能修改,一台服务器只能安装一个mysql. 对于RPM文件一般使用"rpm -ivh 文件名"方式进行安装. RPM安装方式网上有很多介绍,这里不再演示. 对于i…
一.mysql 连接工具 在mysq提供的工具中,DBA使用最频繁的莫过于mysql.这里的mysql是指连接数据库的客户端工具. 1.1 连接选项 -u, -- user=name 指定用户名 -p ,--password[=name] 指定密码 -h ,--host=name 指定服务器IP或者域名 -p, --port=# 指定连接端口 在实际连接中命令如下:mysql -u 用户名 -p 密码 [root@hsr ~]# mysql -u root -p -- 完整的连接命令如下 [ro…
一.概述 前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小. 1. 使用连接池 对于访问数据库来说,建立连接的代价比较昂贵,因为连接到数据库服务器需要经历多个步骤如:建立物理通道,服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证等.因此,有必要建立"连接池"以提高访问的性能.连接池中的连接已经预先创建好了,可以直接分配给应用层使用,减少了创建新连接所消耗的资源,…
一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog [options] log-files log-files2... 其中options有很多选项,常用如下: 选项 说明 -d, --database=name 指定数据库名称,只列出指定的数据库相关操作. -o, --offset=# 忽略掉日志中的前n行命令 -r, --result-file=…
一.增量备份概述 xtrabackup  和innobackupex  二个工具都支持增量备份,这意味着能复制自上次备份以来更改的数据.可以在每个完整备份之间执行许多增量备份,因此,您可以设置一个备份过程,例如每周一次完整备份和每天一次增量备份,或者每天一次完整备份和每小时一次增量备份.对于定期自动备份可以在备份目录里生成带有时间戳的目录. 增量备份之所以有效,是因为每个InnoDB页面都包含一个日志序列号(LSN).每个页面的LSN显示了最近的变化.增量备份复制每个页面,对比增量备份或完整备份…
一. 安装说明 安装XtraBackup 2.4 版本有三种方式: (1) 存储库安装Percona XtraBackup(推荐) (2 )下载的rpm或apt包安装Percona XtraBackup. (3) 源代码编译和安装. Percona为yum (Red Hat.CentOS和Amazon Linux AMI的RPM包)和apt (Ubuntu和Debian的.deb包)提供存储库,用于Percona Server.Percona XtraBackup和Percona Toolkit…
一. 概述 在了解前两篇的权限系统介绍后,这篇继续讲账号的管理,这些管理包括账号的创建,权限更改,账号删除等.用户连接数据库的第一步都是从账号创建开始. 1.  创建账号 有两种方法可以用来授权账号:(1) 是使用grant来授权账号,(2) 是直接操作权限表. 使用grant操作简单,出错率更少.使用grant授权账号时,需先创建用户. -- 在上一篇中有演示创建一个z1@localhost用户,脚本如下: '; -- 语法如下 CREATE USER [IF NOT EXISTS] user…
一.概述 mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限.下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和使用方法(mysql版本 5.7). 1.1  权限系统的工作原理 mysql 权限系统通过两个阶段进行认证:(1) 对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接:(2) 对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应操作. 对于身份认证, mysq…
一.概述 在数据库的日常维护中,表的导入和导出是很频繁的操作,本篇讲解如何使用导入功能,并以案例为演示.某些情况下,需要将表里的数据导出为某些符号分割的纯数据文本,而不是sql语句,比如:(1)用来作为excel显示. (2)节省备份空间.(3)为了快速的加载数据,load data的加载速度比普通的sql加载要快20倍以上.为了满足这些应用,可以使用以下两种办法来实现. 1. 方法1  into outfile -- 格式如下: select ... into tablename into o…
一.概述 物理备份和恢复又分为冷备份和热备份.与逻辑备份相比,它最大优点是备份和恢复的速度更快.因为物理备份的原理都是基于文件的cp. 1.1 冷备份 冷备份就是停掉数据库服务.这种物理备份一般很少使用,因为很多应用是不允许长时间停机的.恢复操作大概是:首先停掉mysql服务, 在操作系统级别恢复mysql的数据文件,然后重启mysql服务, 使用mysqlbinlog工具恢复自备份以来的所有binlog.估计这种方法跟sql server的分离附加库类似.由于会停机,冷备份就不在深入. 1.2…