ad-hoc命令能够让我们通过命令的方式快速的完成一些任务,类似于Linux下的shell命令,常用于一些简单的,临时性的需求。
SSH公钥认证
我们可以通过ask-pass选项手动输入密码进行远程认证,但在批量管理节点时,可以通过配置SSH公钥进行免密认证。
ad-hoc命令能够让我们通过命令的方式快速的完成一些任务,类似于Linux下的shell命令,常用于一些简单的,临时性的需求。
SSH公钥认证
我们可以通过ask-pass选项手动输入密码进行远程认证,但在批量管理节点时,可以通过配置SSH公钥进行免密认证。
Change Streams允许应用程序访问实时的数据更改,而不存在跟踪oplog的复杂性和风险。应用程序可以利用change streams订阅集合、数据库或整个实例的所有数据更改。因为change streams使用聚合框架,所以应用程序也可以过滤特定的消息内容。
Ansible会按照下列顺序读取配置文件,直到找到一个为止,并使用第一个找到的配置文件
Ansible通过inventory文件来配置主机清单,默认文件路径为/etc/ansible/hosts,也可以在自己的管理目录下创建inventory文件。
Inventory参数
参数 | 说明 |
---|---|
ansible_ssh_host | 远程的主机名 |
ansible_ssh_port | 远程的端口 |
ansible_ssh_user | SSH远程的用户 |
ansible_ssh_pass | ssh密码 |
ansible_sudo_pass | 建议使用–ask-sudo-pass选项 |
ansible_sudo_exe | sudo路径 |
ansible_connection | 连接方式,如local,ssh或paramiko |
ansible_ssh_private_key_file | ssh的私钥文件 |
ansible_shell_type | 目标系统的shell类型,默认为sh |
ansible_python_interpreter | 目标主机的python路径 |
MySQL8.0支持在一个复制通道上配置多个可用复制源,当某个复制源不可用时,自动根据权重重新选择数据源进行同步。例如我们本地有一个跨机房的MGR高可用环境,计划在另一个地区的机房搭建一个异步复制节点做容灾。当MGR主节点发生切换时,就可以通过该特性在新主节点继续进行复制。
在MySQL8.0中,用户认证插件默认值为caching_sha2_password,可以实现SHA-256加密认证。
1 | msandbox@(none) 15:39: show variables like 'default_authentication_plugin'; |
测试数据
1 | root@test 03:53: select * from t1; |
pt-stalk采用shell脚本编写,主要用于在问题时间点收集OS及MySQL的诊断信息,包括CPU,内存,磁盘等资源以及数据库锁等待,主从复制,状态等信息。
触发
pt-stalk可以用后台服务的方式监控MySQL并指定触发条件,当触发条件时收集相关当前时间点系统和数据库信息。相关参数如下:
问题描述
在SQLServer2016上创建可用性组失败,错误显示如下:
1 | Failed to bring availability group 'availability_group' online. The operation timed out. |
早前,在Percona for MongoDB上手一文中提到Percona版本的MongoDB支持热备份,现在Percona已经将该功能独立出来,让你可以在社区版的MongoDB replset或集群上进行备份,支持MongoDB3.6或更高版本。
Anemometer 是一个MySQL慢日志展示的工具,结合pt-query-digest,输出较为详细的MySQL慢查询信息,有助于性能优化分析。Anemometer为B/S架构,WEB端依赖于LAMP,因此我们需要安装配置MySQL、PHP、Apache,其数据来源于pt-query-digest,因此我们还需要安装percona-toolkit。
现象:
Centos7.2通过df -h查看目录使用率卡住,无法结束
分析:
通过strace命令跟踪df命令,发现在stat(“/proc/sys/fs/binfmt_misc处卡住,查看unit状态
1 | $ systemctl list-units -all | grep binfmt |
PMM是由Percona开源的,用于管理和监视MySQL和MongoDB性能,是一个不错的性能监控工具。PMM主要由client和server构成,client部署在每个监控主机上,收集服务器指标、常规系统指标和查询分析数据;server用于聚合收集的数据,在web中以图表形式进行展现。
在基于ROW模式复制的环境下,slave_rows_search_algorithms参数控制如何在行中搜索匹配项,特别是是否使用Hash Scan,设置后会立即对所有复制通道生效。其值可设置为INDEX_SCAN、TABLE_SCAN、HASH_SCAN中指定两个值,以逗号分隔,参数默认值为INDEX_SCAN,TABLE_SCAN
。常见的推荐组合及其效果如下:
在MySQL Shell8.0.17中引入了一个多线程CSV导入工具:util.importTable()。在使用之前需要先开启local_infile参数,下面就是一个简单的示例
1 | util.importTable("/tmp/productrange.csv", {schema: "mydb", table: "products", dialect: "csv-unix", skipRows: 1, showProgress: true}) |
查询优化器负责将SQL查询转换为尽可能高效的执行计划,但随着数据环境不断变化,查询优化器可能无法找到最佳的执行计划,导致SQL效率低下。造成这种情况的原因是优化器对查询的数据了解的不够充足,例如:每个表有多少行数据,每列中有多少不同的值,每列的数据分布情况。
在MySQL8.0之前对条件字段做函数操作、或者做运算都将不会使用字段上的索引,例如下面的例子
1 | root@employees 14:09: show index from employees; |
下载Git
解压Git
1 | [root@t-luhx01-v-szzb ~]# tar -xvf git-2.3.0.tar.gz |
编译安装Git
1 | [root@t-luhx01-v-szzb ~]# cd git-2.3.0 |
SCAN(Single Client Access Name)是Oracle从11g R2开始引入的,客户端可以通过SCAN特性负载均衡地连接到RAC群集。SCAN是一个域名,可以解析至少1个IP,至多3个IP,SCAN IP需要与public IP在一个子网内。SCAN域名可以通过DNS或GNS的方式来解析,GNS是11GR2引入的,可以通过DHCP服务为节点和SCAN分配VIP和SCAN IP,当然也可以采用HOST解析的方式来配置SCAN,这种方式就只能定义一个SCAN IP。
心跳(HeartBeat)最主要的目的就是为了检测群集中的节点状态,如果节点状态检测异常,则认为节点存在故障,需要对该节点做出相应的处理。在Oracle RAC中有三种心跳机制:
1 | [root@t-luhxdb1-v-szzb ~]# crsctl get css misscount; |
1 | [root@t-luhxdb1-v-szzb ~]# crsctl get css disktimeout; |
数值类型由两字节、四字节、八字节整数、四字节和八字节浮点数以及可选精度小数组成。下表列出了可用的类型
类型 | 字节数 | 范围 |
---|---|---|
smallint | 2bytes | -32768 to +32767 |
integer | 4bytes | -2147483648 to +2147483647 |
bigint | 8bytes | -9223372036854775808 to 9223372036854775807 |
decimal | 可变 | 小数点前131072位;小数点后的16383位 |
numeric | 可变 | 小数点前131072位;小数点后的16383位 |
real | 4bytes | 6位小数精度 |
double precision | 8bytes | 15位小数精度 |
smallserial | 2bytes | 1 to 32767 |
serial | 4bytes | 1 to 2147483647 |
bigserial | 8bytes | 1 to 9223372036854775807 |
安装依赖包
1 | yum -y install coreutils glib2 lrzsz dstat sysstat e4fsprogs xfsprogs \ |
在MySQL5.7中,Innodb通过重新生成表(即使采用INPLACE DDL算法)向表添加列,其会存在以下问题:
为了解决MongoDB单点故障问题,推出了副本集复制功能,其中主节点用于处理客户端读写请求,从节点用于复制主节点的数据,当主节点故障时,副本集自动切换提升一个成员作为新的主节点继续提供服务。
MySQL8.0.17推出了Clone plugin功能,其允许用户对当前示例进行本地或远程克隆,对快速搭建复制环境,备份等场景非常有用。
1 | function filesize ([string]$filepath) |
在5.7中想要实现角色功能的话可以借助proxies_priv来简单实现,要想使用proxies_priv需要先开启相关参数
1 | root@(none) 17:28: set global check_proxy_users =on; |
安装插件
1 | root@(none) 15:32: INSTALL PLUGIN Rewriter SONAME 'rewriter.so'; |
在MySQL8.0.18之前,针对唯一索引或主键索引进行范围条件加锁时,向右遍历过程中,会一直扫描并加next-key锁到第一个不满足条件的记录为止,然后退化为间隙锁,但RR隔离级别下并不会退化,也就是锁的范围扩大了,严格来说这算是一个bug,这一问题直到8.0.18总算被优化了。
mysqlcheck
1 | [root@centos7-4 service]# mysqlcheck -uroot -p --all-databases --check-upgrade |
当我们通过下列SQL查询数据库当前正在执行的SQL时,我们会发现wait_resource时常会出现等待,今天就来对常见的等待对象类型进行介绍
1 | SELECT |
在SQL Server中,存储数据最小的单位是页,每一页能存放8060个字节。当表上存在聚集索引时,页的组织方式是通过B树方式。在聚集索引B树上,只有叶子节点存放实际数据,每个叶子节点为一页,而SQLServer每个页内存储数据的最小的单位是row,当叶子节点新插入或更新导致叶子节点无法容纳时,就会进行页分裂,在分裂过程中就产生了碎片。
replication-manager是signal18开源的一款数据库高可用工具,采用go语言开发。支持MySQL、MariaDB、Percona,其包含一下功能特性:
在MySQL5.6之前只支持redo日志组提交,如果在环境中开启了binlog,那binlog只能只能串行写入,无法进行组提交,导致数据库整体性能下降非常严重。
开启binglog
1 | [ 10s ] thds: 100 tps: 1391.16 qps: 1391.16 (r/w/o: 0.00/1391.16/0.00) lat (ms,95%): 150.29 err/s: 0.00 reconn/s: 0.00 |
在MySQL执行grant修改用户权限后,都习惯性执行一条flush privileges命令想让修改生效。在刚接触MySQL的时候我也是严格遵守该规范,但似乎并没有去了解flush privileges后面的具体操作,以及这个命令是否真的必要
现实见过在许多开发规范要求中禁止使用count(*),那有没有对此产生过怀疑呢,为什么数据库系统不记录总行数?为什么要禁用count(*)?count(*)与count(1)以及count(字段)有什么区别?
在一次物理机异常蓝屏导致一台从数据库hang住后,通过重启恢复之后启动数据库时错误日志中出现如下错误
1 | 2020-05-07T00:33:05.503723Z 80 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. |
在python中创建变量无需指定变量类型,变量的值是可以修改的,也可以删除指定变量对象.
1 | #单个变量赋值 |
dbdeployer能够快速部署数据库测试环境,一键实现Oracle MySQL、Percona MySQL、MariaDB、TiDB、MySQL NDB Cluster、PXC等测试环境的构建。
项目地址:dbdeployer
日前应用在MySQL5.6上执行ALTER修改字段长度时出现”ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes”的错误。这里的长度是指的索引长度,并不是字段长度限制。
pt-query-digest是Percona Toolkit工具集中常用的一个工具,其能够分析MySQL的slowlog,general log,binlog文件,同时也可以使用show processlist或者tcpdump抓取的MySQL协议数据进行分析。
ONLINE DDL是MySQL 5.6开始引入的,能够在DDL执行期间不影响正常的DML操作,提高数据并发能力。Online DDL可分为三种情况:
目前数据库查询表空间使用率非常慢,甚至要半个小时才会出结果。查询语句的执行计划如下:
1 | SQL>explain plan for select t.* |
现象
数据库等待事件出现大量TM表锁,造成数据库严重等待。经过查询引起的SQL为简单的DELETE语句
1 | DELETE FROM INSP.WF_XXX_XXX WHERE PROCESS_ID='8a80841663fb6dc00164d051ddd3240c'; |
近日,突然收到数据库同步延迟告警短信,登陆数据库后发现一个从节点确实存在复制延迟情况,并且还在不断增长
1 | mysql> show slave status\G |
透明表空间传输能够使用物理复制的方式快速迁移一张表,通常用于数据表存在问题时,通过异机恢复后再以该方式将表快速恢复到生产环境中。
源表信息如下:
1 | root@test 15:56: select * from c; |
在2.8到4.0之间的版本中,Redis同步机制为PSYNC1,在4.0中升级为PSYNC2。其中主要优化减少了全量同步的操作。比如下列场景:
1 | 32716:M 01 Apr 16:58:50.209 * The server is now ready to accept connections on port 7379 |
数据库备份恢复是运维工作的重点,当发生数据丢失或异常,需要通过备份等手段恢复数据,保护数据安全。
备份类型分为三种:冷备、热备和温备,冷备即将数据库服务停止后对文件进行拷贝;热备即在线备份,备份过程中不影响业务正常运行;温备即对数据库全局加锁,禁止数据更新以达到备份一致性。
备份方式通常采用逻辑备份或物理备份,逻辑备份速度较慢,备份灵活,可针对实例、数据库、表、对象等进行备份,且不受版本影响;物理备份速度较快,备份不够灵活,跨版本之前可能存在兼容性问题。
制定备份策略应该综合考虑备份空间大小和恢复速度,全备周期短,空间使用就大;全备周期长,恢复起来就慢。
MySQL从5.7.6开始支持Rewrite plugin插件,可以将符合条件的SQL语句进行改写。
1 | [root@t-luhx03-v-szzb share]# mysql -uroot -p < /usr/local/mysql/share/install_rewriter.sql |
在MongoDB启用AUTH认证后,需要通过用户名/密码以及认证数据库去连接实例,因此需要提前创建好相应的用户
USER文档描述
1 | { |
Oracle数据库提供了一种机制,可以在不明显影响表的可用性情况下进行表结构更改。当表在线重定义时,在重定义过程中,可以对表进行查询或DML。该表仅在非常小的窗口期以独占模式被锁定,该窗口独立于表格的大小和重定义的复杂性,并且对用户完全透明。在线重定义表需要大量的空闲空间,大致为被重定义表的二倍空间,如果添加新列则需要更多的空间。
范围分区(RANGE)
范围分区是将数据按范围映射到每一个分区里去,分区范围是在创建分区时指定的,例如经常使用的时间分区,把数据表按月分区。
1 | create table partition_tab |
Twemproxy的特性:
Redis sentinel是redis官方推荐的redis高可用(HA)解决方案。sentinel主要的功能包括:
在MySQL中,针对不同的类型的子查询,优化器选择的优化策略也不同。对于IN、=ANY类子查询,优化器会选择如下策略:
对于NOT IN、<>ALL类子查询,优化器会选择如下策略:
通常我们可以通过执行info memory来查看Redis的内存指标,通过分析指标来了解Redis的内存使用情况,其中的指标说明如下
执行计划是在SQL性能优化时关注的重点,通过执行计划我们能够知道MySQL如何处理SQL,分析性能瓶颈并作出相应优化。
1 | root@employees 11:40: explain select * from titles where emp_no=10001; |
Redis3.2支持GEO(地理信息定位)功能,能够存储地理位置信息来实现附近的位置等依赖于地理位置信息的功能。
添加地理位置
1 | geoadd key longitude latitude member |
longitude、latitude、member分别是地理位置的经度、维度、成员。如果需要更新地理位置信息也可以使用geoadd命令。
假设表存在N行数据,每个索引节点平均有M个索引key,这时候索引的树高度则为logN/logM。由于索引页大小固定,KEY越小,M值就会越大,索引高度就越小,遍历树的效率就更高。
1 | mysql> select * from information_schema.innodb_sys_tables a left join information_schema.innodb_sys_indexes b on a.table_id=b.table_id where a.name='employees/employees'; |
索引用于提高查询效率,常见的索引数据结构有:哈希表、有序数组和搜索树。
MySQL临时表是一种特殊的数据对象,它具有以下几个特点:
键重命名
1 | rename key newkey |
如果在重命名之前新的键名已经存在将会对其值进行覆盖,为了防止被强制rename,可以使用renamenx命令,确保只有新的key不存在时才会覆盖。
在rename的时候还有以下两点需要注意:
当前业务出现死锁情况,其操作流程为批量DELETE再批量INSERT,经过排查发现是由于二级唯一索引在DELETE之后未完全被purge回收,再批量插入时互相等待造成的死锁。这里需要说明的是,当记录被DELETE删除后该行记录会被标识为DELETE_MARK状态,此时并没有真正地被回收,只有等purge线程回收后才是真正意义的被删除。
Redis有5种基础数据结构,分别为:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。所有数据结构都是key-value形式,通过唯一key来获取对应的value值,不同数据结构的差异在于value结构不同。
在针对存在唯一索引的表中并发插入数据时,可能会触发死锁问题,今天我们就一起来探讨该死锁产生的原因。先准备测试案例,创建带有唯一索引的表A
1 | mysql> desc a; |
MySQL基本上可以分为Server层和引擎层。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖了MySQL的大部分核心服务以及所有的内置函数;存储引擎层负责数据的存储和提取,其架构为插件形式,支持Innodb、MyISAM、Memory等多种存储引擎,目前OLTP系统大多数采用InnoDB,从MySQL5.5开始便作为默认存储引擎存在。
编辑响应文件
1 | ;SQL Server 2014 Configuration File |
Orchestrator是GO编写的MySQL高可用性和复制拓扑管理工具,支持复制拓扑结构的调整,自动故障转移和手动主从切换等。提供Web界面展示MySQL复制的拓扑关系及状态,也可以在Web上更改MySQL的复制关系和部分配置信息,同时也提供命令行和api接口,方便运维管理。相比较MHA来看最重要的是解决了管理节点的单点问题,其通过raft协议保证本身的高可用
参数 | 说明 |
---|---|
PORT | 指定服务监听端口,默认端口为7809 |
DYNAMICPORTLIST | 动态端口,当指定端口不可用时,MGR进程会从动态端口中选择一个可用端口 |
COMMENT | 注释行,等价于– |
AUTOSTART | MGR进程启动时自动启动指定进程 |
AUTORESTART | 自动重启进程。例如:AUTORESTART EXTRACT,RETRIES 5,WAITMINUTES 3表示当EXTRACT进程异常时,每三分钟尝试重启所有EXTRACT进程,尝试五次 |
PURGEOLDEXTRACTS | 定期清理指定目录下的trail文件,例如:PURGEOLDEXTRACTS ./dirdat/,usecheckpoints,minkeepdays 3 表示对超过三天的trail文件进行清理 |
LAGREPORT / LAGINFO / LAGCRITICAL | 设置延迟告警阀值,例如:LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 60表示每小时进行一次延迟检查,延迟超过30分钟则以普通信息输出到错误日志文件中,如果超过60分钟则以警告的形式记录到错误日志中 |
CHECKMINUTES | 定义MGR检查和告警的频率 |
选择数据库版本
指定安装路径以及数据库路径
OGG FOR SQL Server Download
View Password:j6mh
开启强制日志、附加日志、并确定处于归档模式
1 | SQL> ALTER DATABASE FORCE LOGGING; |
1 | SQL> select DBID,NAME,LOG_MODE,PLATFORM_NAME,CURRENT_SCN,DB_UNIQUE_NAME from v$database; |
略。请参考MySQL相关文章
1 | sql> create database zabbix character set utf8 collate utf8_bin; |
Download
将文件重命名为NetFx3.cab并放入C:\windows下
1 | dism /online /Enable-Feature /all /FeatureName:NetFx3 /Source:"%windir%" /LimitAccess |