高可用主从复制方案环境搭建Mysql+Corosync+Pacemaker+DRBD

  • 概述

Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。

Pacemaker是一个集群资源管理器。它利用你喜欢的集群基础构件(OpenAIS 或heartbeat)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性。

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。

  • 环境准备

2台64位redhat 6.5:Node1:10.47.169.235,Node2:10.47.169.177

  1. 配置节点间主机名相互解析

Node1:

[root@linux235 ~]# hostname

linux235

[root@linux235 ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.47.169.177   linux177

10.47.169.235   linux235

Node2:

[root@linux177 ~]# hostname

Linux177

[root@linux177 ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.47.169.177   linux177

10.47.169.235   linux235

  • 配置节点间ssh互信

Node1:

[root@linux235 ~]# ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ”

[root@linux235 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@linux177

Node2:

[root@linux177 ~]# ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ”

[root@linux177 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@linux235

  • 关闭防火墙与SELinux

Node1:

[root@linux235 ~]# service iptables stop

[root@linux235 ~]# chkconfig iptables off

[root@linux235 ~]# vi /etc/selinux/config

修改配置项SELINUX=disabled

Node2:

[root@linux177 ~]# service iptables stop

[root@linux177 ~]# chkconfig iptables off

[root@linux177 ~]# vi /etc/selinux/config

修改配置项SELINUX=disabled

  • 上传安装文件并挂载安装光盘

rhel-server-6.5-x86_64-dvd.iso

drbd84-utils-8.4.4-2.el6.elrepo.x86_64.rpm

kmod-drbd84-8.4.4-1.el6.elrepo.x86_64.rpm

python-pssh-2.3.1-4.3.x86_64.rpm

pssh-2.3.1-4.3.x86_64.rpm

crmsh-2.1-1.2.x86_64.rpm

文件上传到2台服务器的/root目录下

Node1:

清理yum缓存:

[root@linux235 ~]# rm -rf /var/cache/yum/

创建光盘加载路径:

[root@linux235 ~]# mkdir /mnt/cdrom

挂载 ISO文件:

[root@linux235 ~]# mount -o loop /root/rhel-server-6.5-x86_64-dvd.iso /mnt/cdrom

修改yum安装配置:

[root@linux235 ~]# vi /etc/yum.repos.d/rhel-source.repo

[Server]

name=Server

baseurl=file:///mnt/cdrom/Server

enabled=1

gpgcheck=0

[HighAvailability]

name=HighAvailability

baseurl=file:///mnt/cdrom/HighAvailability

enabled=1

gpgcheck=0

[LoadBalancer]

name=LoadBalancer

baseurl=file:///mnt/cdrom/LoadBalancer

enabled=1

gpgcheck=0

[ScalableFileSystem]

name=ScalableFileSystem

baseurl=file:///mnt/cdrom/ScalableFileSystem

enabled=1

gpgcheck=0

[ResilientStorage]

name=ResilientStorage

baseurl=file:///mnt/cdrom/ResilientStorage

enabled=1

gpgcheck=0

Node2:

清理yum缓存:

[root@linux177 ~]# rm -rf /var/cache/yum/

创建光盘加载路径:

[root@linux177 ~]# mkdir /mnt/cdrom

挂载 ISO文件:

[root@linux177 ~]# mount -o loop /root/rhel-server-6.5-x86_64-dvd.iso /mnt/cdrom

修改yum安装配置:

[root@linux177 ~]# vi /etc/yum.repos.d/rhel-source.repo

内容同node1

  • 创建Mysql安装用户

Node1:

[root@linux235 ~]# groupadd rdb –g 501

[root@linux235 ~]# useradd rdb –g rdb –d /home/rdb –u 501

Node2:

[root@linux177 ~]# groupadd rdb –g 501

[root@linux177 ~]# useradd rdb –g rdb –d /home/rdb –u 501

注:此处的组ID和用户ID建议大于500,可以使用cat /etc/passwd查看已使用的用户ID,但是两台服务器必须一致,否则后面会产生权限错误问题。

  • Corosync安装与配置
  • 安装corosync

Node1:

[root@linux235 ~]# yum install -y corosync

Node2:

[root@linux177 ~]# yum install -y corosync

  • 配置corosync

Node1:

[root@linux235 ~]# cd /etc/corosync/

[root@linux235 corosync]# cp corosync.conf.example corosync.conf

[root@linux235 corosync]# vi corosync.conf

# Please read the corosync.conf.5 manual page

compatibility: whitetank

totem {

        version: 2

        secauth: off

        threads: 0

        interface {

                ringnumber: 0

                bindnetaddr: 10.47.169.0  #心跳线网段 

                mcastaddr: 226.94.1.1  #组播传播心跳信息

                mcastport: 5405  #组播端口

                ttl: 1

        }

}

logging {

        fileline: off

        to_stderr: no

        to_logfile: yes

        to_syslog: no  #不记入系统日志

        logfile: /var/log/cluster/corosync.log  #日志位置

        debug: off

        timestamp: on

        logger_subsys {

                subsys: AMF

                debug: off

        }

}

amf {

        mode: disabled

}

#启用pacemaker

service {  

    ver: 0    

    name: pacemaker    

}

aisexec {  

    user: root    

    group: root    

}

  • 生成密钥文件

[root@linux235 corosync]# corosync-keygen

会生成一个authkey文件

  • 将配置文件及密钥文件复制到node2上

[root@linux235 corosync]# scp authkey corosync.conf linux177:/etc/corosync/

  • Pacemaker安装与配置
  • 安装pacemaker

Node1:

[root@linux235 ~]# yum install -y pacemaker

Node2:

[root@linux177 ~]# yum install -y pacemaker

  • 安装crmsh(pacemaker管理工具)

Node1:

[root@linux235 ~]# rpm –ivh /mnt/cdrom/Packages/redhat-rpm-config-9.0.3-42.el6.noarch.rpm

[root@linux235 ~]# rpm –ivh python-pssh-2.3.1-4.3.x86_64.rpm

[root@linux235 ~]# rpm –ivh pssh-2.3.1-4.3.x86_64.rpm

[root@linux235 ~]# rpm –ivh crmsh-2.1-1.2.x86_64.rpm

Node2:

[root@linux177 ~]# rpm –ivh /mnt/cdrom/Packages/redhat-rpm-config-9.0.3-42.el6.noarch.rpm

[root@linux235 ~]# rpm –ivh python-pssh-2.3.1-4.3.x86_64.rpm

[root@linux177 ~]# rpm –ivh pssh-2.3.1-4.3.x86_64.rpm

[root@linux177 ~]# rpm –ivh crmsh-2.1-1.2.x86_64.rpm

  • 启动corosync+pacemaker

在配置corosync时,将pacemaker整合进corosync中,corosync启动的同时也会启动pacemaker。

Node1:

[root@linux235 ~]# service corosync start

Node2:

[root@linux177 ~]# service corosync start

  • 查看启动信息
  • 查看corosync引擎是否正常启动

[root@linux235 ~]# grep -e “Corosync Cluster Engine” -e “configuration file” /var/log/cluster/corosync.log

Nov 24 09:11:37 corosync [MAIN  ] Corosync Cluster Engine (‘1.4.1’): started and ready to provide service.

Nov 24 09:11:37 corosync [MAIN  ] Successfully read main configuration file ‘/etc/corosync/corosync.conf’.

  • 查看初始化成员节点通知是否正常发出

[root@linux235 ~]# grep  TOTEM /var/log/cluster/corosync.log

Nov 24 09:11:37 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).

Nov 24 09:11:37 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).

Nov 24 09:11:38 corosync [TOTEM ] The network interface [10.47.169.235] is now up.

Nov 24 09:11:38 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

  • 查看pacemaker是否正常启动

[root@linux235 ~]# grep pcmk_startup /var/log/cluster/corosync.log

Nov 24 09:11:38 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized

Nov 24 09:11:38 corosync [pcmk  ] Logging: Initialized pcmk_startup

Nov 24 09:11:38 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615

Nov 24 09:11:38 corosync [pcmk  ] info: pcmk_startup: Service: 9

Nov 24 09:11:38 corosync [pcmk  ] info: pcmk_startup: Local hostname: linux235

  • 查看集群状态

[root@linux235 ~]#  crm status

Last updated: Wed Nov 25 16:10:47 2015

Last change: Tue Nov 24 10:54:40 2015 via cibadmin on linux177

Stack: classic openais (with plugin)

Current DC: linux235 – partition with quorum

Version: 1.1.10-14.el6-368c726

2 Nodes configured, 2 expected votes

0 Resources configured

Online: [ linux177 linux235 ]

linux177、linux235两个节点都在线,DC是linux235。

  • DRBD安装与配置
  • 安装drbd

Node1:

[root@linux235 ~]# rpm -ivh drbd84-utils-8.4.4-2.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.4-1.el6.elrepo.x86_64.rpm

Node2:

[root@linux177 ~]# rpm -ivh drbd84-utils-8.4.4-2.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.4-1.el6.elrepo.x86_64.rpm

  • 配置drbd

Node1:

[root@linux235 ~]# cd /etc/drbd.d

[root@linux235 drbd.d]# vi global_common.conf

global {

        usage-count no; #不参与drbd资源统计

}

common {

        protocol C;  #使用完全同步复制协议

        handlers {

                pri-on-incon-degr “/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;

                pri-lost-after-sb “/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;

                local-io-error “/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f”;

        }

        startup {

#               wfc-timeout 10;

        }

        options {

        }

        disk {

                on-io-error detach;  #同步错误的做法是分离

        }

        net {

                 cram-hmac-alg “sha1”;   #设置加密算法sha1

                 shared-secret “mydrbd”;   #设置加密key

after-sb-0pri discard-zero-changes;  #设置脑裂修复策略

        }

}

  • 配置新资源

Node1:

[root@linux235 drbd.d]# vi mysql.res

resource mysql{

    on linux235 {

        device       /dev/drbd0;

        disk         /dev/sdb2;

        address      10.47.169.235:6669;  

        meta-disk    internal;

    }

    on linux177 {

        device       /dev/drbd0;

        disk         /dev/sdb2;

        address      10.47.169.177:6669;

        meta-disk    internal;

    }

}

  • 将配置文件复制到node2

Node1:

[root@linux235 drbd.d]# scp global_common.conf web.res linux177:/etc/drbd.d/

  • 初始化资源

Node1:

[root@linux235 ~]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb2

[root@linux235 ~]# drbdadm create-md mysql

Node2:

[root@linux177 ~]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb2

[root@linux177 ~]# drbdadm create-md mysql

  • 启动DRBD

Node1:

[root@linux235 ~]# service drbd start

Node2:

[root@linux177 ~]# service drbd start

  • 设置node2为主节点

Node2:

[root@linux177 ~]# drbdadm — –overwrite-data-of-peer primary mysql

同步数据,需要一段时间全部同步完成,查看完成状态:

Node2:

[root@linux177 ~]# drbd-overview

  0:web/0  Connected Primary/Secondary UpToDate/UpToDate C r—–

[root@linux177 ~]# cat /proc/drbd

version: 8.4.4 (api:1/proto:86-101)

GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by phil@Build64R6, 2013-10-14 15:33:06

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–

    ns:388 nr:632 dw:1024 dr:6853 al:8 bm:12 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

cs:连接状态,ro:角色,ds:磁盘状态

  • 格式化并挂载

Node2:

[root@linux177 ~]# mkfs.ext4 /dev/drbd0

[root@linux177 ~]# mkdir /data

[root@linux177 ~]# mount –t ext4 /dev/drbd0 /data

[root@linux177 ~]# chown rdb:rdb –R /data

  • 设置node1为主节点

Node2:

[root@linux177 ~]# umount /data/

[root@linux177 ~]# drbdadm secondary mysql

Node1:

[root@linux235 ~]# drbdadm primary mysql

[root@linux235 ~]# drbd-overview

0:web/0 Connected Primary/SecondaryUpToDate/UpToDateC r—–

可以看到已经切换为主

[root@linux235 ~]# mkdir /data

[root@linux235 ~]# mount –t ext4 /dev/drbd0 /data

  • Mysql安装与配置

以MariaDB10.0.12为例,其余版本mysql请参考各自安装文档。

  1. 上传mysql安装程序

Node1:

[root@linux235 ~]# su – rdb

上传到rdb用户HOME目录下

  • 解压并修改配置文件

Node1:

[rdb@linux235 ~]$ tar –xzf mariadb64_linux.tar.gz

[rdb@linux235 ~]$ cp bin etc lib log share ~/

[rdb@linux235 ~]$ cd ~

[rdb@linux235 ~]$ vi etc/my.cnf

# Don’t change configuration items to other sections

[general]

instance_num=1

#

# The MariaDB server

#

[mysqld]

# generic configuration options

table_open_cache = 2048

max_allowed_packet = 16M

sort_buffer_size = 512K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

max_connect_errors = 100000

skip-external-locking

sql_mode = STRICT_TRANS_TABLES

sync_binlog=1

expire_logs_days=7

#*** MyISAM Specific options

key_buffer_size = 16M

myisam_sort_buffer_size = 8M

# *** INNODB Specific options ***

innodb_data_file_path = ibdata1:500M:autoextend

innodb-file-per-table

innodb_buffer_pool_size = 600M

innodb_flush_log_at_trx_commit = 1

innodb_io_capacity = 200

innodb_io_capacity_max = 2000

innodb_lock_wait_timeout = 50

innodb_log_buffer_size = 8M

innodb_log_files_in_group = 2

innodb_log_file_size = 100M

innodb_read_io_threads = 8

innodb_write_io_threads = 8

#the default size of binlog file is set to 10M

max_binlog_size = 10485760

# binary logging format

binlog_format=ROW

# the slave data obtained by replication also credited in binlog when log-slave-updates=1

log-slave-updates=1

# required unique id between 1 and 2^32 – 1

# defaults to 1 if master-host is not set

# but will not function as a master if omitted

binlog_annotate_row_events=ON

replicate_annotate_row_events=ON

replicate_events_marked_for_skip=FILTER_ON_MASTER

slave-skip-errors=1007,1008,1050,1060,1061,1062,1068

[mysqld1]

port            = 5518

socket          = /home/rdb/bin/mysql1.sock

bind_address = 0.0.0.0

datadir  = /data/data

log-error=/home/rdb/log/mysqld1.log

pid-file=/home/rdb/bin/mysqld1.pid

innodb_data_home_dir = /data/data

innodb_log_group_home_dir = /data/redo

server-id       = 1

log-bin=/data/binlog/mysql-bin

relay-log=/data/relaylog/relay-bin

#

# The following options will be read by MariaDB client applications.

# Note that only client applications shipped by MariaDB are guaranteed

# to read this section. If you want your own MariaDB client program to

# honor these values, you need to specify it as an option during the

# MariaDB client library initialization.

#

[client]

port            = 5518

socket          = /home/rdb/bin/mysql1.sock

[mysql]

no-auto-rehash

# Only allow UPDATEs and DELETEs that use keys.

#safe-updates

注意粗体部分的修改

  • 初始化Mysql

Node1:

根据上一节的配置创建目录:

[rdb@linux235 ~]$ mkdir –p /data/data /data/redo /data/binlog /data/relaylog

初始化:

[rdb@linux235 ~]$ sh bin/mysql_install_db

  • 将Mysql复制到node2

Node1:

[rdb@linux235 ~]$ scp -r bin etc lib log share rdb@linux177:/home/rdb

  • 将启动脚本上传到node1、node2的/etc/init.d目录

[rdb@linux235 ~]$ cat /etc/init.d/mysqld

#!/bin/sh

#

# set +x

start()

{

    su – $RDB_USER -c “$RDB_HOME/bin/mysql.server start $1”

    if [ “$?” -ne 0 ]; then

                exit 1

        fi

}

stop()

{

    su – $RDB_USER -c “$RDB_HOME/bin/mysql.server stop $1”

    if [ “$?” -ne 0 ]; then

                exit 1

        fi

}

status()

{

    su – $RDB_USER -c “$RDB_HOME/bin/mysql.server status $1”

    if [ “$?” -ne 0 ]; then

                exit 3

        fi

}

usage()

{

    echo “usage:”

    echo “$0 [start|stop|status] [instance_id|all]”

}

################################################################################

#  main

################################################################################

RDB_USER=”rdb”

RDB_HOME=”/home/rdb”

case “$1” in

    start)

        start “$2”

        ;;

    stop)

        stop “$2”

        ;;

    status)

        status “$2”

        ;;

    *)

        usage

esac

  • 集群配置
  • 关闭drbd并设置开机不启动

Node1:

[root@linux235 ~]# service drbd stop

[root@linux235 ~]# chkconfig drbd off

[root@linux235 ~]# chkconfig corosync on

Node2:

[root@linux177 ~]# service drbd stop

[root@linux177 ~]# chkconfig drbd off

[root@linux177 ~]# chkconfig corosync on

  • 增加drbd资源

Node1:

[root@linux235 ~]# crm

crm(live)# configure

crm(live)configure# property stonith-enabled=false

crm(live)configure# property no-quorum-policy=ignore

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mysql op start timeout=240 op stop timeout=100 op monitor role=Master interval=20 timeout=30 op monitor role=Slave interval=30 timeout=30

crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

crm(live)configure# commit

crm(live)configure# show

node linux177

node linux235

primitive mysqldrbd ocf:linbit:drbd \

        params drbd_resource=mysql \

        op start timeout=240 interval=0 \

        op stop timeout=100 interval=0 \

        op monitor role=Master interval=20 timeout=30 \

        op monitor role=Slave interval=30 timeout=30

ms ms_mysqldrbd mysqldrbd \

        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

property cib-bootstrap-options: \

        expected-quorum-votes=2 \

        stonith-enabled=false \

        no-quorum-policy=ignore

Node2:

查看一下集群状态

[root@linux177 ~]# crm status

Last updated: Fri Nov 27 16:04:50 2015

Last change: Fri Nov 27 15:59:17 2015

Current DC: linux177 – partition with quorum

2 Nodes configured

2 Resources configured

Online: [ linux177 linux235 ]

 Master/Slave Set: ms_mysqldrbd [mysqldrbd]

     Masters: [ linux235 ]

     Slaves: [ linux177 ]

主备已生效

  • 增加文件系统资源

Node1:

crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/data fstype=ext4 op start timeout=60 op stop timeout=60 op monitor interval=20 timeout=40

crm(live)configure# colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master

crm(live)configure# order mystore_after_ms_mysqldrbd mandatory: ms_mysqldrbd:promote mystore:start

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# show

node linux177

node linux235

primitive mysqldrbd ocf:linbit:drbd \

        params drbd_resource=mysql \

        op start timeout=240 interval=0 \

        op stop timeout=100 interval=0 \

        op monitor role=Master interval=20 timeout=30 \

        op monitor role=Slave interval=30 timeout=30

primitive mystore Filesystem \

        params device=”/dev/drbd0″ directory=”/data” fstype=ext4 \

        op start timeout=60 interval=0 \

        op stop timeout=60 interval=0 \

        op monitor interval=20s timeout=40s

ms ms_mysqldrbd mysqldrbd \

        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master

order mystore_after_ms_mysqldrbd Mandatory: ms_mysqldrbd:promote mystore:start

property cib-bootstrap-options: \

        expected-quorum-votes=2 \

        stonith-enabled=false \

        no-quorum-policy=ignore \

        dc-version=1.1.11-97629de \

        cluster-infrastructure=”classic openais (with plugin)”

crm(live)configure# exit

mount命令查看/data目录已被挂载好

[root@linux235 ~]# mount

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext=”system_u:object_r:tmpfs_t:s0″)

/dev/sda1 on /boot type ext4 (rw)

/dev/sda5 on /home type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

10.47.169.195:/root/mounttest1 on /root/nfs_root type nfs (rw,vers=4,addr=10.47.169.195,clientaddr=10.47.169.235)

/root/rhel-server-6.6-x86_64-dvd.iso on /mnt/cdrom type iso9660 (rw,loop=/dev/loop0)

/dev/drbd0 on /data type ext4 (rw)

  • 增加mysql资源

Node1:

[root@linux235 ~]# crm

crm(live)# configure

crm(live)configure# primitive mysqld lsb:mysqld op monitor interval=20s timeout=15s

crm(live)configure# colocation mysqld_with_mystore inf: mysqld mystore

crm(live)configure# order mysqld_after_mystore mandatory: mystore mysqld

crm(live)configure# show

node linux177

node linux235

primitive mysqld lsb:mysqld \

        op monitor interval=20s timeout=15s

primitive mysqldrbd ocf:linbit:drbd \

        params drbd_resource=mysql \

        op start timeout=240 interval=0 \

        op stop timeout=100 interval=0 \

        op monitor role=Master interval=20 timeout=30 \

        op monitor role=Slave interval=30 timeout=30

primitive mystore Filesystem \

        params device=”/dev/drbd0″ directory=”/data” fstype=ext4 \

        op start timeout=60 interval=0 \

        op stop timeout=60 interval=0 \

        op monitor interval=20s timeout=40s

ms ms_mysqldrbd mysqldrbd \

        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

colocation mysqld_with_mystore inf: mysqld mystore

colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master

order mysqld_after_mystore Mandatory: mystore mysqld

order mystore_after_ms_mysqldrbd Mandatory: ms_mysqldrbd:promote mystore:start

property cib-bootstrap-options: \

        expected-quorum-votes=2 \

        stonith-enabled=false \

        no-quorum-policy=ignore \

        dc-version=1.1.11-97629de \

        cluster-infrastructure=”classic openais (with plugin)”

crm(live)configure# commit

crm(live)configure# exit

查看集群状态

[root@linux235 ~]# crm status

Last updated: Fri Nov 27 17:02:45 2015

Last change: Fri Nov 27 16:44:49 2015

Stack: classic openais (with plugin)

Current DC: linux235 – partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

4 Resources configured

Online: [ linux177 linux235 ]

 Master/Slave Set: ms_mysqldrbd [mysqldrbd]

     Masters: [ linux235 ]

     Slaves: [ linux177 ]

 mystore        (ocf::heartbeat:Filesystem):    Started linux235

 mysqld (lsb:mysqld):   Started linux235

查看mysql状态,已启动

[root@linux235 ~]# service mysqld status

running process of [rdb]….

ID:1 rdb 15341 1 0 16:44 ? 00:00:01 /home/rdb/bin/mysqld

status OK!

  • 增加vip资源

Node1:

[root@linux235 ~]# crm

crm(live)# configure

crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=”10.47.169.14″ nic=eth0 cidr_netmask=24 op monitor interval=20s timeout=20s

crm(live)configure# colocation vip_with_ms_mysqldrbd inf: ms_mysqldrbd:Master vip

crm(live)configure# verify    

crm(live)configure# show

node linux177

node linux235

primitive mysqld lsb:mysqld \

        op monitor interval=20s timeout=15s

primitive mysqldrbd ocf:linbit:drbd \

        params drbd_resource=mysql \

        op start timeout=240 interval=0 \

        op stop timeout=100 interval=0 \

        op monitor role=Master interval=20 timeout=30 \

        op monitor role=Slave interval=30 timeout=30

primitive mystore Filesystem \

        params device=”/dev/drbd0″ directory=”/data” fstype=ext4 \

        op start timeout=60 interval=0 \

        op stop timeout=60 interval=0 \

        op monitor interval=20s timeout=40s

primitive vip IPaddr \

        params ip=10.47.169.14 nic=eth0 cidr_netmask=24 \

        op monitor interval=20s timeout=20s

ms ms_mysqldrbd mysqldrbd \

        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

colocation mysqld_with_mystore inf: mysqld mystore

colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master

colocation vip_with_ms_mysqldrbd inf: ms_mysqldrbd:Master vip

order mysqld_after_mystore Mandatory: mystore mysqld

order mystore_after_ms_mysqldrbd Mandatory: ms_mysqldrbd:promote mystore:start

property cib-bootstrap-options: \

        expected-quorum-votes=2 \

        stonith-enabled=false \

        no-quorum-policy=ignore \

        dc-version=1.1.11-97629de \

        cluster-infrastructure=”classic openais (with plugin)”

crm(live)configure# commit

crm(live)configure# exit

查看状态:

[root@linux235 ~]# crm status

Last updated: Mon Nov 30 11:04:05 2015

Last change: Mon Nov 30 11:01:40 2015

Stack: classic openais (with plugin)

Current DC: linux235 – partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

5 Resources configured

Online: [ linux177 linux235 ]

 Master/Slave Set: ms_mysqldrbd [mysqldrbd]

     Masters: [ linux235 ]

     Slaves: [ linux177 ]

 mystore        (ocf::heartbeat:Filesystem):    Started linux235

 mysqld (lsb:mysqld):   Started linux235

 vip    (ocf::heartbeat:IPaddr):        Started linux235

集群全部配置完成

  • 常见错误
  • 手工脑裂修复

如果在系统日志中发现如下信息:

Split-Brain detected but unresolved, dropping connection!

说明已发生脑裂,并且无法自动修复。需要根据实际需要,丢弃一个节点A上所做的修改,保留另一个节点B上修改的数据。处理步骤如下:

  1. 在A上执行 drbdadm secondary mysql
  2. drbdadm — –discard-my-data connect mysql
  3. 在B上执行drbdadm connect mysql

注:mysql为之前定义的drbd资源名

  • 无法初始化drbd资源

如果在执行drbdadm create-md mysql命令时遇到如下错误:

Device size would be truncated, which

 would corrupt data and result in

 ‘access beyond end of device’ errors.

 You need to either

    * use external meta data (recommended)

    * shrink that filesystem first

    * zero out the device (destroy the filesystem)

 Operation refused.

 Command ‘drbdmeta 0 v08 /dev/hdb1 internal create-md’ terminated with exit coolcode 40

 drbdadm create-md ha: exited with coolcode 40

需要使用dd命令覆盖文件系统中的设备块信息,如下所示:

dd if=/dev/zero bs=1M count=1 of=/dev/sdb2

mysql status速查

no stauts desc
1 Aborted_clients 由于客户端没有正确关闭连接导致客户端终止而中断的连接数。
2 Aborted_connects 试图连接到MySQL服务器而失败的连接数。
3 Binlog_cache_disk_use 使用临时二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量。
4 Binlog_cache_use 使用临时二进制日志缓存的事务数量。
5 Binlog_stmt_cache_disk_use 当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句。
6 Binlog_stmt_cache_use 使用二进制日志缓存文件的非事务语句数量。
7 Bytes_received 从所有客户端接收到的字节数。
8 Bytes_sent 发送给所有客户端的字节数。
9 Com_admin_commands Com_xxx 语句计数变量表示每个xxx 语句执行的次数。每类语句有一个状态变量。例如,Com_delete和Com_insert分别统计DELETE 和INSERT语句执行的次数。
10 Com_assign_to_keycache
11 Com_alter_db
12 Com_alter_db_upgrade
13 Com_alter_event
14 Com_alter_function
15 Com_alter_procedure
16 Com_alter_server
17 Com_alter_table
18 Com_alter_tablespace
19 Com_alter_user
20 Com_analyze
21 Com_begin
22 Com_binlog
23 Com_call_procedure
24 Com_change_db
25 Com_change_master
26 Com_check
27 Com_checksum
28 Com_commit
29 Com_create_db
30 Com_create_event
31 Com_create_function
32 Com_create_index
33 Com_create_procedure
34 Com_create_server
35 Com_create_table
36 Com_create_trigger
37 Com_create_udf
38 Com_create_user
39 Com_create_view
40 Com_dealloc_sql
41 Com_delete
42 Com_delete_multi
43 Com_do
44 Com_drop_db
45 Com_drop_event
46 Com_drop_function
47 Com_drop_index
48 Com_drop_procedure
49 Com_drop_server
50 Com_drop_table
51 Com_drop_trigger
52 Com_drop_user
53 Com_drop_view
54 Com_empty_query
55 Com_execute_sql
56 Com_flush
57 Com_get_diagnostics
58 Com_grant
59 Com_ha_close
60 Com_ha_open
61 Com_ha_read
62 Com_help
63 Com_insert
64 Com_insert_select
65 Com_install_plugin
66 Com_kill
67 Com_load
68 Com_lock_tables
69 Com_optimize
70 Com_preload_keys
71 Com_prepare_sql
72 Com_purge
73 Com_purge_before_date
74 Com_release_savepoint
75 Com_rename_table
76 Com_rename_user
77 Com_repair
78 Com_replace
79 Com_replace_select
80 Com_reset
81 Com_resignal
82 Com_revoke
83 Com_revoke_all
84 Com_rollback
85 Com_rollback_to_savepoint
86 Com_savepoint
87 Com_select
88 Com_set_option
89 Com_signal
90 Com_show_binlog_events
91 Com_show_binlogs
92 Com_show_charsets
93 Com_show_collations
94 Com_show_create_db
95 Com_show_create_event
96 Com_show_create_func
97 Com_show_create_proc
98 Com_show_create_table
99 Com_show_create_trigger
100 Com_show_databases
101 Com_show_engine_logs
102 Com_show_engine_mutex
103 Com_show_engine_status
104 Com_show_events
105 Com_show_errors
106 Com_show_fields
107 Com_show_function_code
108 Com_show_function_status
109 Com_show_grants
110 Com_show_keys
111 Com_show_master_status
112 Com_show_open_tables
113 Com_show_plugins
114 Com_show_privileges
115 Com_show_procedure_code
116 Com_show_procedure_status
117 Com_show_processlist
118 Com_show_profile
119 Com_show_profiles
120 Com_show_relaylog_events
121 Com_show_slave_hosts
122 Com_show_slave_status
123 Com_show_status
124 Com_show_storage_engines
125 Com_show_table_status
126 Com_show_tables
127 Com_show_triggers
128 Com_show_variables
129 Com_show_warnings
130 Com_slave_start
131 Com_slave_stop
132 Com_stmt_close
133 Com_stmt_execute
134 Com_stmt_fetch
135 Com_stmt_prepare
136 Com_stmt_reprepare
137 Com_stmt_reset
138 Com_stmt_send_long_data
139 Com_truncate
140 Com_uninstall_plugin
141 Com_unlock_tables
142 Com_update
143 Com_update_multi
144 Com_xa_commit
145 Com_xa_end
146 Com_xa_prepare
147 Com_xa_recover
148 Com_xa_rollback
149 Com_xa_start
150 Compression 客户端是否使用了压缩的连接协议。
151 Connection_errors_accept 在监听端口调用accept()时的错误数
152 Connection_errors_internal 由于服务器内部错误被拒绝的连接数,如未能启动一个新线程或内存不足的情况。
153 Connection_errors_max_connections 由于 max_connections参数限制导致被拒绝的连接数。
154 Connection_errors_peer_address 当查找连接客户端IP地址时发生的连接错误数
155 Connection_errors_select 在监听端口调用select()或poll()时的错误数(这个操作的失败并不一定意味着客户端连接被拒绝。)
156 Connection_errors_tcpwrap 被libwrap库拒绝的连接数。
157 Connections 试图连接到(不管是否成功)MySQL服务器的连接数。
158 Created_tmp_disk_tables 服务器执行语句时在硬盘上自动创建的临时表的数量。
159 Created_tmp_files mysqld已经创建的临时文件的数量。
160 Created_tmp_tables 服务器执行语句时自动创建的内存中的临时表的数量。如果Created_tmp_disk_tables较大,你可能要增加tmp_table_size值使临时表基于内存而不基于硬盘。
161 Delayed_errors 用INSERT DELAYED写的出现错误的行数(可能为duplicate key)。
162 Delayed_insert_threads 使用的INSERT DELAYED处理器线程数。
163 Delayed_writes 写入的INSERT DELAYED行数。
164 Flush_commands 执行的FLUSH语句数。
165 Handler_commit 内部提交语句数。
166 Handler_delete 行从表中删除的次数。
167 Handler_discover MySQL服务器可以问NDB CLUSTER存储引擎是否知道某一名字的表。这被称作发现。Handler_discover说明通过该方法发现的次数。
168 Handler_external_lock 调用external_lock()的次数,通常发生在访问表实例的开始或结束时。不同存储引擎直接可能有差异。
169 Handler_mrr_init 服务器使用存储引擎自己的多量程读(Multi-Range Read)实现访问表的次数。
170 Handler_prepare 准备阶段的两阶段提交操作计数器。
171 Handler_read_first 索引中第一条被读的次数。如果较高,它建议服务器正执行大量全索引扫描;例如,SELECT col1 FROM foo,假定col1有索引。
172 Handler_read_key 根据键读一行的请求数。如果较高,说明查询和表的索引正确。
173 Handler_read_last 查询读最后一个索引的请求数。当使用ORDER BY时,服务器优先发出使用第一个索引的请求,之后是使用其他索引。当使用ORDER BY DESC时,服务器优先发出使用最后一个索引的请求, 之后是前几个索引的请求。
174 Handler_read_next 按照键顺序读下一行的请求数。如果你用范围约束或如果执行索引扫描来查询索引列,该值增加。
175 Handler_read_prev 按照键顺序读前一行的请求数。该读方法主要用于优化ORDER BY … DESC。
176 Handler_read_rnd 根据固定位置读一行的请求数。如果你正执行大量查询并需要对结果进行排序该值较高。你可能使用了大量需要MySQL扫描整个表的查询或你的连接没有正确使用键。
177 Handler_read_rnd_next 在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明你的表索引不正确或写入的查询没有利用索引。
178 Handler_rollback 内部ROLLBACK语句的数量。
179 Handler_savepoint 在一个存储引擎放置一个保存点的请求数量
180 Handler_savepoint_rollback 在一个存储引擎的要求回滚到一个保存点数目
181 Handler_update 在表内更新一行的请求数。
182 Handler_write 在表内插入一行的请求数。
183 Innodb_buffer_pool_dump_status 记录innodb缓冲池中页数量。由innodb_buffer_pool_dump_at_shutdown或者innodb_buffer_pool_dump_now的设置触发。
184 Innodb_buffer_pool_load_status innodb缓冲池通过读
185 Innodb_buffer_pool_pages_data 包含数据的页数(脏或干净)。
186 Innodb_buffer_pool_bytes_data 包含数据的页字节数。
187 Innodb_buffer_pool_pages_dirty 当前的脏页数。
188 Innodb_buffer_pool_bytes_dirty 当前的脏页字节数。
189 Innodb_buffer_pool_pages_flushed 要求清空的缓冲池页数。
190 Innodb_buffer_pool_pages_free 空页数。
191 Innodb_buffer_pool_pages_latched 在InnoDB缓冲池中锁定的页数。这是当前正读或写或由于其它原因不能清空或删除的页数。
192 Innodb_buffer_pool_pages_misc 忙的页数,因为它们已经被分配优先用作管理,例如行锁定或适用的哈希索引。该值还可以计算为Innodb_buffer_pool_pages_total – Innodb_buffer_pool_pages_free – Innodb_buffer_pool_pages_data。
193 Innodb_buffer_pool_pages_total 缓冲池总大小(页数)。
194 Innodb_buffer_pool_read_ahead_rnd InnoDB初始化的“随机”read-aheads数。当查询以随机顺序扫描表的一大部分时发生。
195 Innodb_buffer_pool_read_ahead 后台预读线程读取到Innodb缓冲池的页的数量。
196 Innodb_buffer_pool_read_ahead_evicted 后台预读线程读取到Innodb缓冲池的页由于未被查询使用而驱逐的数量。
197 Innodb_buffer_pool_read_requests InnoDB已经完成的逻辑读请求数
198 Innodb_buffer_pool_reads 不能满足InnoDB必须单页读取的缓冲池中的逻辑读数量。
199 Innodb_buffer_pool_wait_free 一般情况,通过后台向InnoDB缓冲池写。但是,如果需要读或创建页,并且没有干净的页可用,则它还需要先等待页面清空。该计数器对等待实例进行记
数。如果已经适当设置缓冲池大小,该值应小。
200 Innodb_buffer_pool_write_requests 向InnoDB缓冲池的写数量。
201 Innodb_data_fsyncs fsync()操作数。
202 Innodb_data_pending_fsyncs 当前挂起的fsync()操作数。
203 Innodb_data_pending_reads 当前挂起的读数。
204 Innodb_data_pending_writes 当前挂起的写数。
205 Innodb_data_read 至此已经读取的数据数量(字节)。
206 Innodb_data_reads 数据读总数量。
207 Innodb_data_writes 数据写总数量。
208 Innodb_data_written 至此已经写入的数据量(字节)。
209 Innodb_dblwr_pages_written 为此目的已经写好的页数。
210 Innodb_dblwr_writes 已经执行的双写操作数量
211 Innodb_have_atomic_builtins 指示服务器是否建立原子操作指令。
212 Innodb_log_waits 我们必须等待的时间,因为日志缓冲区太小,我们在继续前必须先等待对它清空。
213 Innodb_log_write_requests 日志写请求数。
214 Innodb_log_writes 向日志文件的物理写数量。
215 Innodb_os_log_fsyncs 向日志文件完成的fsync()写数量。
216 Innodb_os_log_pending_fsyncs 挂起的日志文件fsync()操作数量。
217 Innodb_os_log_pending_writes 挂起的日志文件写操作。
218 Innodb_os_log_written 写入日志文件的字节数。
219 Innodb_page_size 编译的InnoDB页大小(默认16KB)。许多值用页来记数;页的大小很容易转换为字节。
220 Innodb_pages_created 创建的页数。
221 Innodb_pages_read 读取的页数。
222 Innodb_pages_written 写入的页数。
223 Innodb_row_lock_current_waits 当前等待的待锁定的行数。
224 Innodb_row_lock_time 行锁定花费的总时间,单位毫秒。
225 Innodb_row_lock_time_avg 行锁定的平均时间,单位毫秒。
226 Innodb_row_lock_time_max 行锁定的最长时间,单位毫秒。
227 Innodb_row_lock_waits 一行锁定必须等待的时间数。
228 Innodb_rows_deleted 从InnoDB表删除的行数。
229 Innodb_rows_inserted 插入到InnoDB表的行数。
230 Innodb_rows_read 从InnoDB表读取的行数。
231 Innodb_rows_updated InnoDB表内更新的行数。
232 Innodb_num_open_files InnoDB目前打开的文件数。
233 Innodb_truncated_status_writes SHOW ENGINE INNODB STATUS 的输出时间将被截断。监控程序解析这个输出,可以测试这项之前和之后的值,以确认输出是否完整。
234 Innodb_available_undo_logs Innodb可用的undo_logs
235 Innodb_purge_trx_id_age
236 Innodb_purge_view_trx_id_age
237 Key_blocks_not_flushed 键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。
238 Key_blocks_unused 键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存
239 Key_blocks_used 键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。
240 Key_read_requests 从缓存读键的数据块的请求数。
241 Key_reads 从硬盘读取键的数据块的次数。如果Key_reads较大,则Key_buffer_size值可能太小。可以用Key_reads/Key_read_requests计算缓存损失率。
242 Key_write_requests 将键的数据块写入缓存的请求数。
243 Key_writes 向硬盘写入将键的数据块的物理写操作的次数。
244 Last_query_cost 用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值0表示还没有编译查询。默认值是0。Last_query_cost具有会话范围。
245 Last_query_partial_plans
246 Max_used_connections 服务器启动后已经同时使用的连接的最大数量。
247 Not_flushed_delayed_rows 等待写入INSERT DELAY队列的行数。
248 Open_files 打开的文件的数目。
249 Open_streams 打开的流的数量(主要用于记录)。
250 Open_table_definitions 被缓存的.FRM文件数量
251 Open_tables 当前打开的表的数量。
252 Opened_files 已经打开的文件的数量。
253 Opened_table_definitions 被缓存过的.FRM文件的数量。
254 Opened_tables 已经打开的表的数量。如果Opened_tables较大,table_cache 值可能太小。
255 Performance_schema_accounts_lost performance schema状态变量提供一些因为内存限制而没有创建或加载的instrument。
256 Performance_schema_cond_classes_lost
257 Performance_schema_cond_instances_lost
258 Performance_schema_digest_lost
259 Performance_schema_file_classes_lost
260 Performance_schema_file_handles_lost
261 Performance_schema_file_instances_lost
262 Performance_schema_hosts_lost
263 Performance_schema_locker_lost
264 Performance_schema_mutex_classes_lost
265 Performance_schema_mutex_instances_lost
266 Performance_schema_rwlock_classes_lost
267 Performance_schema_rwlock_instances_lost
268 Performance_schema_session_connect_attrs_lost
269 Performance_schema_socket_classes_lost
270 Performance_schema_socket_instances_lost
271 Performance_schema_stage_classes_lost
272 Performance_schema_statement_classes_lost
273 Performance_schema_table_handles_lost
274 Performance_schema_table_instances_lost
275 Performance_schema_thread_classes_lost
276 Performance_schema_thread_instances_lost
277 Performance_schema_users_lost
278 Prepared_stmt_count
279 Qcache_free_blocks 查询缓存内自由内存块的数量。
280 Qcache_free_memory 用于查询缓存的自由内存的数量。
281 Qcache_hits 查询缓存被访问的次数。
282 Qcache_inserts 加入到缓存的查询数量。
283 Qcache_lowmem_prunes 由于内存较少从缓存删除的查询数量。
284 Qcache_not_cached 非缓存查询数(不可缓存,或由于query_cache_type设定值未缓存)。
285 Qcache_queries_in_cache 登记到缓存内的查询的数量。
286 Qcache_total_blocks 查询缓存内的总块数。
287 Queries 查询数。
288 Questions 已经发送给服务器的查询的个数。
289 Select_full_join 没有使用索引的联接的数量。如果该值不为0,你应仔细检查表的索引。
290 Select_full_range_join 在引用的表中使用范围搜索的联接的数量。
291 Select_range 在第一个表中使用范围的联接的数量。一般情况不是关键问题,即使该值相当大。
292 Select_range_check 在每一行数据后对键值进行检查的不带键值的联接的数量。如果不为0,你应仔细检查表的索引。
293 Select_scan 对第一个表进行完全扫描的联接的数量。
294 Slave_heartbeat_period 显示一个Slave的复制心跳间隔。
295 Slave_last_heartbeat Slave最后一次心跳。
296 Slave_open_temp_tables 当前由从SQL线程打开的临时表的数量。
297 Slave_received_heartbeats 累计每个SLAVE从最后一次启动、复位或更换master到现在收到的心跳数。
298 Slave_retried_transactions 启动后复制从服务器SQL线程尝试事务的总次数。
299 Slave_rows_last_search_algorithm_used
300 Slave_running 如果该服务器是连接到主服务器的从服务器,则该值为ON。
301 Slow_launch_threads 创建时间超过slow_launch_time秒的线程数。
302 Slow_queries 查询时间超过long_query_time秒的查询的个数。
303 Sort_merge_passes 排序算法已经执行的合并的数量。如果这个变量值较大,应考虑增加sort_buffer_size系统变量的值。
304 Sort_range 在范围内执行的排序的数量。
305 Sort_rows 已经排序的行数。
306 Sort_scan 通过扫描表完成的排序的数量。
307 Ssl_accept_renegotiates 用于SSL连接的变量。
308 Ssl_accepts
309 Ssl_callback_cache_hits
310 Ssl_cipher
311 Ssl_cipher_list
312 Ssl_client_connects
313 Ssl_connect_renegotiates
314 Ssl_ctx_verify_depth
315 Ssl_ctx_verify_mode
316 Ssl_default_timeout
317 Ssl_finished_accepts
318 Ssl_finished_connects
319 Ssl_server_not_after
320 Ssl_server_not_before
321 Ssl_session_cache_hits
322 Ssl_session_cache_misses
323 Ssl_session_cache_mode
324 Ssl_session_cache_overflows
325 Ssl_session_cache_size
326 Ssl_session_cache_timeouts
327 Ssl_sessions_reused
328 Ssl_used_session_cache_entries
329 Ssl_verify_depth
330 Ssl_verify_mode
331 Ssl_version
332 Table_locks_immediate 立即获得的表的锁的次数。
333 Table_locks_waited 不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。
334 Table_open_cache_hits open_table缓存的命中数
335 Table_open_cache_misses open_table缓存的未命中数
336 Table_open_cache_overflows open_table缓存的溢出数
337 Tc_log_max_pages_used
338 Tc_log_page_size
339 Tc_log_page_waits
340 Threads_cached 线程缓存内的线程的数量。
341 Threads_connected 当前打开的连接的数量。
342 Threads_created 创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。缓存访问率的计算方法Threads_created/Connections。
343 Threads_running 激活的(非睡眠状态)线程数。
344 Uptime 服务器已经运行的时间(以秒为单位)。
345 Uptime_since_flush_status 最近一次使用FLUSH STATUS 的时间(以秒为单位

mariadb用户管理

1、  创建用户

前置条件:必须拥有globalCREATE USER privilege或者mysql 数据库的INSERT privilege。

语法:

CREATEUSER user_specification

[, user_specification] …

 

user_specification:

user

[

IDENTIFIED BY [PASSWORD] ‘password’

| IDENTIFIED WITH auth_plugin [AS’auth_string’]

]

例:MariaDB>create user ‘user’@’host’ identified by ‘password’;

其中:

user为用户名。

host为主机。可以使用localhost、ip地址或者hostname,使用’%’表示不限制主机。

‘user’@’host’构成一个唯一用户。

password为密码。

 

2、  修改用户

前置条件:alteruser语句需要具备修改账号的权限并且对mysql库有insert权限。

语法:

SETPASSWORD [FOR user] =

{

PASSWORD(‘cleartext password’)

| OLD_PASSWORD(‘cleartext password’)

| ‘encrypted password’

}

例:MariaDB>set password for ‘user’@’host’ = PASSWORD(‘password’);

其中:

‘user’@’host’为需要设置密码的用户,不写for user为设置当前用户的密码,                  PASSWORD及OLD_PASSWORD对后面的明文‘password’进行加密处理,或者直接输入加密后的密码,如’*23AE809DDACAF96AF0FD78ED04B6A265E05AA257’。

 

3、  删除用户

语法:

DROP USER user [, user] …

例:MariaDB >dropuser ‘user’@’host’;

4、  限制账户资源

对单个账户可以设置的资源限制有

1.           每小时查询次数

2.           每小时更新次数

3.           每小时连接次数

4.           同时在线的连接个数

对应:GRANTOPTION

| MAX_QUERIES_PER_HOUR count

| MAX_UPDATES_PER_HOUR count

| MAX_CONNECTIONS_PER_HOUR count

| MAX_USER_CONNECTIONS count

例:MariaDB > GRANT ALL ON *.* TO ‘user’@’host’

IDENTIFIEDBY ‘password’

WITHMAX_QUERIES_PER_HOUR 20

MAX_UPDATES_PER_HOUR 10

MAX_CONNECTIONS_PER_HOUR 5

MAX_USER_CONNECTIONS 2;

当账户的限制非0时则会给资源使用计数。Server运行时给每个账户的使用资源计数,如果达到了连接次数限制则下一个连接将会被拒绝。同样地若达到了查询、修改等次数限制则会产生一个error信息。

每个账户各自进行资源计数而不是针对客户端。可以全局重置当前的每小时使用的资源计数,也可以针对指定的账户重置计数:

1.      将所有账户计数器清零使用FLUSH USER_RESOURCES语句。重新加载权限表语句也会清零计数器(FLUSH PRIVILEGES或mysqladmin reload命令)

2.      给特定账户清零计数器使用GRANT USAGE语句指定一个与原来一样的限制次数

计数器清零对于max_user_connections无效,系统重启会将所有的计数器清零。

 

5、  用户管理表user

用户信息存储在系统表mysql.user中,可以通过对user表的增删改查来实现对用户的管理。

User表字段及其含义:

字段名 含义
Host 表示容许该用户连接的客户端限制,取值有:’localhost’、IP地址、域名、’%’;其中%表示不限制
User 用户名
Password 加密后的密码
Select_priv 确定用户是否可以通过SELECT命令
Insert_priv 确定用户是否可以通过INSERT命令插入数据
Update_priv 确定用户是否可以通过UPDATE命令修改现有数据
Delete_priv 确定用户是否可以通过DELETE命令删除现有数据
Create_priv 确定用户是否可以创建新的数据库和表
Drop_priv 确定用户是否可以删除现有数据库和表
Reload_priv 确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表。
Shutdown_priv 确定用户是否可以关闭MySQL服务器。在将此权限提供给root账户之外的任何用户时,都应当非常谨慎
Process_priv 确定用户是否可以通过SHOW PROCESSLIST命令查看其他用户的进程
File_priv 确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令
Grant_priv 确定用户是否可以将已经授予给该用户自己的权限再授予其他用户。例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户
References_priv 目前只是某些未来功能的占位符;现在没有作用
Index_priv 确定用户是否可以创建和删除表索引
Alter_priv 确定用户是否可以重命名和修改表结构
Show_db_priv 确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库。
Super_priv 确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令。
Create_tmp_table_priv 确定用户是否可以创建临时表
Lock_tables_priv 确定用户是否可以使用LOCK TABLES命令阻止对表的访问/修改
Execute_priv 确定用户是否可以执行存储过程。
Repl_slave_priv 确定用户是否可以读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信
Repl_client_priv 确定用户是否可以确定复制从服务器和主服务器的位置
Create_view_priv 确定用户是否可以创建视图
Show_view_priv 确定用户是否可以查看视图或了解视图如何执行
Create_routine_priv 确定用户是否可以更改或放弃存储过程和函数
Alter_routine_priv 确定用户是否可以修改或删除存储函数及函数
Create_user_priv 确定用户是否可以执行CREATE USER命令
Event_priv 确定用户能否创建、修改和删除事件
Trigger_priv 确定用户能否创建和删除触发器
Create_tablespace_priv 确定用户能否创建表空间
ssl_type
ssl_cipher
x509_issuer
x509_subject
max_questions 每小时可执行的查询命令
max_updates 每小时可执行的更新命令
max_connections 每小时的容许用户的最多连接次数
max_user_connections 每小时容许用户最大连接客户端个数
Plugin
authentication_string 认证字符串
password_expired 密码是否已过期
is_role 是否为角色