MySQL管理工具:mysql_config_editor的使用

mysql_config_editor是MySQL自带的一款用于安全加密登录的工具,对于多实例的MySQL数据库来说,每次登陆需要指定host,port,password是非常烦人的,所以,可以使用 mysql_config_editor工具可以很容易管理多实例。对于有很多DB的DBA来说,当你在1台机器上设置了你所有DB的信息时候,就不需要再频繁登陆相应的服务器去处理了。

下面,我们对这个工具,做一些简单的介绍,大家可以自行练习

首先,对该工具进行一个简单的总体演练,大家看一眼,就应该知道怎么用了。

[root@slave1 home]# mysql_config_editor set –login-path=remote3306 –host=172.16.10.54 –user=root –password –port=3306

Enter password:

[root@slave1 home]# hexdump ~/.mylogin.cnf
0000000 0000 0000 0f1c 0605 0010 151d 1519 0e0f
0000010 060a 0903 0b19 0110 0010 0000 08c8 25a0
0000020 907b e28c 75d3 9d5d 6bbe 90b6 0010 0000
0000030 7698 6fad 169e bea9 7e58 4e0a 135e 7303
0000040 0010 0000 a0a3 8978 06af ef3c 5d7e fa82
0000050 32e3 dcf0 0020 0000 8455 18d8 3093 129b
0000060 0602 df2e 78e5 dc8a dd81 50ee 1b9d 0656
0000070 56dc 00a3 a7e4 2d4e 0010 0000 6ca8 f0ab
0000080 ed41 7eae d3c5 9a44 ec8d 6e6b 0010 0000
0000090 c2f6 d7ad d751 39e0 3077 9e20 afb5 5ca5
00000a0 0010 0000 7698 6fad 169e bea9 7e58 4e0a
00000b0 135e 7303 0020 0000 248d 3ca6 f169 6b50
00000c0 449c ee50 cbf9 55ac c820 ff96 26ad eb50
00000d0 6686 32f6 4e18 76eb 0020 0000 3538 f59b
00000e0 6723 a926 096a a351 9356 9017 f42f 62af
00000f0 43e3 30ee c5ee a15e 9a4a 346a 0010 0000
0000100 6ca8 f0ab ed41 7eae d3c5 9a44 ec8d 6e6b
0000110

[root@slave1 home]# mysql –login-path=remote3306
Welcome to the MySQL monitor. Commands end with ; or \g.
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

(root@172.16.10.54:(none) 01:23)>

 

相关选项说明:

mysql_config_editor:

* set 对login path进行登陆信息设置:

mysql_config_editor set –login-path=remote3306 –host=172.16.10.54 –user=root –password –port=3306

* print 显示指定的login path所有信息

[root@slave1 home]# mysql_config_editor print –login-path=remote3306

[remote3306]

user = root

password = *****

host = 172.16.10.54

port = 3306

* remove 从登陆文件中删除所有的login path

[root@slave1 home]# mysql_config_editor remove –login-path=remote3306

* reset 删除登陆日志的所有内容

[root@slave1 home]# mysql_config_editor reset

 

mysql_config_editor set

* -h,–host=name 添加host到登陆文件中

* -G,–login-path=name 在登录文件中为loginpath添加名字(默认为client)

* -p,–password 在登陆文件中添加密码(该密码会被mysql_config_editor自动加密)

* -u,–user 添加用户名到登陆文件中

* -S,–socket=name 添加sock文件路径到登陆文件中

* -P,–port=name 添加登陆端口到登陆文件中

 

mysql_config_editor print

* –all ,输出所有的login path的登陆信息

* –login-path, 指定login path,输出指定的login path登陆信息

 

mysql_config_editor remove

* -h,–host 删除login path中的host信息

* -G,–login-path 指定删除的loginpath(默认为client)

* -p,–password 删除login path中的password信息

* -u,–user 删除login path中的用户名信息

* -S,–socket 删除login path中的sock文件信息

* -P,–port 删除login path中的port信息

 

mysql_config_editor reset

多主写入集群套件(gelera cluster)的说明

目前,mysql 相关的集群套件,聊的比较多的,无非是多点写入、同步复制的问题。市面上,说的比较多的有以下几种:

第一种:percona 公司推出的 percona xtradb cluster 套件(网址:https://www.percona.com/software/mysql-database/percona-xtradb-cluster)

第二种:gelera 公司推出的 gelera cluster 套件(网址:http://galeracluster.com/products/)

目前,gelera 公司的gelera cluster 套件,mariadb 官方已经采用,并且官方提供相关的文档和下载包(mariadb 10 和 mariadb 5 都有)

而针对mysql的话,mysql 官方没有集成,所以,这个工作就是gelera公司在做,它针对mysql 最新的GA版本打上相关patch,然后,结合gelera cluster使用

这些集群套件,是否有在线上使用的案例?线上使用的性能如何?这个,我不是很了解,有在线上实施的,可以留言

下面主要,描述一下,实现的功能:

1).同步复制

2).多主服务器的拓扑结构

3).可以在任意节点上进行读写

4).自动剔除故障节点

5).自动加入新节点

6).真正行级别的并发复制

7).客户端连接跟操作单台MySQL数据库的体验一致

8).无单点故障,易扩展

下面是针对使用gelera cluster 的一些注意事项:

1、使用Galera必须要给MySQL-Server打wsrep补丁。可以直接使用官方提供的已经打好补丁的MySQL安装包;

如果服务器上已经安装了标准版MYSQL,需要先卸载再重新安装。卸载前注意备份数据。

2、MySQL/Galera集群只支持InnoDB存储引擎。如果你的数据表使用的MyISAM,需要转换为InnoDB,否则记录不会在多台复制。

可以在备份老数据时,为mysqldump命令添加–skip-create-options参数,这样会去掉表结构的声明信息,再导入集群时自动使用InnoDB引擎。

不过,这样会将AUTO_INCREMENT一并去掉,已有AUTO_INCREMENT列的表,必须在导入后重新定义。

3、MySQL 5.5及以下的InnoDB引擎不支持全文索引(FULLTEXT indexes),如果之前使用MyISAM并建了全文索引字段的话,只能安装MySQL 5.6 with wsrep patch。

4、所有数据表必须要有主键(PRIMARY),如果没有主键可以建一条AUTO_INCREMENT列。

5、MySQL/Galera集群不支持下面的查询:LOCK/UNLOCK TABLES,不支持下面的系统变量:character_set_server、utf16、utf32及ucs2。

6、数据库日志不支持保存到表,只能输出到文件(log_output = FILE),不能设置binlog-do-db、binlog-ignore-db。

7、跟其他集群一样,为了避免节点出现脑裂而破坏数据,建议Galera集群最低添加3个节点。

8、在高并发的情况下,多主同时写入时可能会发生事务冲突,此时只有一个事务请求会成功,其他的全部失败。可以在写入/更新失败时,自动重试一次,再返回结果。

9、节点中每个节点的地位是平等的,没有主次,向任何一个节点读写效果都是一样的。实际可以配合VIP/LVS或HA使用,实现高可用性。

10、如果集群中的机器全部重启,如机房断电,第一台启动的服务器必须以空地址启动:mysqld_safe –wsrep_cluster_address=gcomm:// >/dev/null &

配图如下:

复件 galera_replication1

MySQL V5.7 多源复制特性

前端时间,一直关注5.7有多源复制的特性,当时,5.7.5版本不支持,而且官方文档也没有说明,本以为,只能用mariadb的多源复制特性,没想到,最近在看官方文档时,已有了相关文档,于是,果断试了一下。下面做一下,简单的演示:

官方文档:
http://dev.mysql.com/doc/refman/5.7/en/replication-multi-source-tutorials.html

要求:

1.复制的相关信息需要存在 table ,不能存在 file:

–master-info-repository=TABLE

–relay-log-info-repository=TABLE

2.多源复制,可以基于GTID,也可以基于 position

3.部署时,所使用的命令如下:

# 基于GTID模式的:

CHANGE MASTER TO MASTER_HOST=’master1′, MASTER_USER=’blackhole’, MASTER_PORT=3306,MASTER_PASSWORD=’black@hole’ MASTER_AUTO_POSITION = 1 FOR CHANNEL ‘master-1′;

# 基于Position模式的:

CHANGE MASTER TO MASTER_HOST=’172.16.10.54′, MASTER_USER=’blackhole’, MASTER_PORT=3306, MASTER_PASSWORD=’black@hole’ ,MASTER_LOG_FILE=’mysql-bin.000047′, MASTER_LOG_POS=602 FOR CHANNEL ‘master-1′;

4.开启 / 关闭 相关channel的复制:

# 开启/关闭全部

START SLAVE thread_types;

STOP SLAVE thread_types;

# 开启/关闭指定channel

START SLAVE thread_types FOR CHANNEL channel;

STOP SLAVE thread_types FOR CHANNEL channel;

# 关于 stop/start slave的语法:

STOP/START SLAVE [thread_types] FOR CHANNEL channel

thread_type:

IO_THREAD | SQL_THREAD

# MySQL 5.7 目前还没有GA版本发布,暂时,不做详细测试,仅根据官方文档说明,留以备注
下面是一个简单的测试:

172.16.10.54:3306 master1 mysql-5.6.25 复制用户/密码:blackhole/black@hole 日志点:mysql-bin.000047、602

172.16.10.54:3307 master2 mariadb-10 复制用户/密码:blackhole/black@hole 日志点:mysql-bin.000015 、23736

172.16.10.55:3306 slave mysql-5.7.8

slave机器添加两个主从的方式如下:

# 添加master-1:

CHANGE MASTER TO MASTER_HOST=’172.16.10.54′, MASTER_USER=’blackhole’, MASTER_PORT=3306, MASTER_PASSWORD=’black@hole’ ,MASTER_LOG_FILE=’mysql-bin.000047′, MASTER_LOG_POS=602 FOR CHANNEL ‘master-1′;

# 添加master-2:

CHANGE MASTER TO MASTER_HOST=’172.16.10.54′, MASTER_USER=’blackhole’, MASTER_PORT=3307, MASTER_PASSWORD=’black@hole’ ,MASTER_LOG_FILE=’mysql-bin.000015′, MASTER_LOG_POS=23736 FOR CHANNEL ‘master-2’;

#启动主从:

start slave;

#启动指定主从:

start slave for channel ‘master-1’;

#查看主从状态:

show slave status\G;

#查看指定从机状态:

show slave status for channel ‘master-1’\G;

# 最终截图如下:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.10.54
Master_User: blackhole
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000047
Read_Master_Log_Pos: 602
Relay_Log_File: slave3-relay-bin-master@002d1.000002
Relay_Log_Pos: 317
Relay_Master_Log_File: mysql-bin.000047
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Channel_Name: master-1
*************************** 2. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.10.54
Master_User: blackhole
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 23736
Relay_Log_File: slave3-relay-bin-master@002d2.000002
Relay_Log_Pos: 445
Relay_Master_Log_File: mysql-bin.000015
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Channel_Name: master-2

MySQL密码强度审计插件:validate_password的使用说明

相信很多人在日常工作中,都会遇到设置用户、密码之类的问题,很多人使用keepass来生成和保存密码;但是,很多人为了易于记忆,会选择相对简答的密码,这样,在安全性方面,会存在非常严重的安全隐患。

在mysql 5.6对密码的强度进行了加强,推出了validate_password 插件。支持密码的强度要求。

此插件要求版本:5.6.6 以上版本
安装方式:

1.安装插件:(默认安装了插件后,强度插件就启用了,关闭,需要在配置文件假如相关关闭参数)

mysql>INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;

2.配置文件添加部分参数:

[mysqld]

plugin-load=validate_password.so

validate_password_policy=2

validate-password=FORCE_PLUS_PERMANENT

3.以上处理后,就可以测试了:

mysql> SET PASSWORD = PASSWORD(‘abc’);

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

mysql> SET PASSWORD = ‘*0D3CED9BEC10A777AEC23CCC353A8C08A633045E’;

Query OK, 0 rows affected (0.01 sec)

4.相关说明:

(1).相关选项:

validate-password=ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 决定是否使用该插件(及强制/永久强制使用)。

validate_password_dictionary_file:插件用于验证密码强度的字典文件路径。

validate_password_length:密码最小长度。

validate_password_mixed_case_count:密码至少要包含的小写字母个数和大写字母个数。

validate_password_number_count:密码至少要包含的数字个数。

validate_password_policy:密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。

validate_password_special_char_count:密码至少要包含的特殊字符数。

其中,关于validate_password_policy-密码强度检查等级:

0/LOW:只检查长度。

1/MEDIUM:检查长度、数字、大小写、特殊字符。

2/STRONG:检查长度、数字、大小写、特殊字符字典文件。

(2).插件的安装启用:

插件对应的库对象文件需在配置选项plugin_dir指定的目录中。

可使用–plugin-load=validate_password.so,在server启动时载入插件,或者将plugin-load=validate_password.so写入配置文件。

也可以通过如下语句在server运行时载入插件(会注册进mysql.plugins表)

mysql> INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;

(3).为阻止该插件在运行时被删除可在配置文件中添加:

[mysqld]

plugin-load=validate_password.so

validate-password=FORCE_PLUS_PERMANENT

xtrabackup实现多实例备份实践

多实例备份,我一直未曾去学习使用它,最近,因公司报表机数据增长太快,dump备份太慢,也很容易卡住,因此,决定弃用dunp备份,改用xtrabackup备份,实现增备、全备;

目前,DB存在3307,3308,3309 三个实例,使用的mysqld_multi部署的多实例;

这里,如果需要使用xtrabackup备份多实例的话,需要针对每个实例,将配置文件独立写出一份,放在/home/backup/conf目录下

我们备份的目录为:/home/backup

备份的最新检查点放在:/home/backup/last_backup

备份存放路径:/home/backup/BackupDir_xtrabackup

备份日志存放路径:/home/backup/log

具体目录结构如下:

[root@slave1 home]# tree /home/backup
/home/backup
├── BackupDir_xtrabackup
├── backup_xtrabackup.sh
├── conf
│ ├── my3307.cnf
│ ├── my3308.cnf
│ └── my3309.cnf
├── last_backup
└── log

percona xtrabackup 官方文档地址:

https://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/innobackupex_script.html

下面,简单讲一下,xtrbackup备份多实例的使用

xtrbackup常用的几个参数:

–user: mysql用户

–password: 用户密码

–defaults-file: 指定my.cnf文件路径,若不指定则读取mysql默认的my.cnf文件,这里我们会指定我们在conf目录独立出的各个实例的文件

–socket:mysql实例对应的socket文件

全备示例:

innobackupex –user=root –password=123456 –socket=/tmp/mysql3307.sock –defaults-file=/home/backup/conf/my3307.cnf /home/backup/BackupDir_xtrabackup/3307/

当备份日志出现:innobackupex: completed OK! 则代表备份成功。

备份结束后,备份目录会出现几个文件,下面,我们解释一下:

backup-my.cnf:主要是记录innobackupex中使用到Mysql参数。

xtrabackup_checkpoints:记录备份类型及开始及结束的lsn位置。backup_type 有两种full-prepared (全备)、incremental (增备)。

xtrabackup_info:记录mysql相关信息。

xtrabackup_logfile: xtrabackup自己的日志文件,新版本中不直接可见。

xtrabackup_binlog_info :这个会记录你备份结束时,主上binlog的位置,可以用于重建主从

增量备份,由于是基于全备执行,而且,方法比较简单,这里就不演示

下面描述一下,恢复需要注意的问题:

1. 对全量备份进行操作

了解两个参数 :

–apply-log :创建新的事务日志,从backup-my.cnf文件中读取innodb配置信息。

–redo-only:只读已提交的事务,在最后一次增量合并时,不需要填写这个参数。

全量备份恢复前准备

innobackupex –apply-log –redo-only /home/backup/BackupDir_xtrabackup/3307/……

2. 将第一次增量备份的数据合并到全量备份中

innobackupex –apply-log –redo-only /home/backup/BackupDir_xtrabackup/3307/…full –incremental-dir= /home/backup/BackupDir_xtrabackup/3307/…..inc

3.将第二次全量备份的数据合并到全量备份中(最后一个增量备份)

innobackupex –apply-log /home/backup/BackupDir_xtrabackup/3307/…full –incremental-dir= /home/backup/BackupDir_xtrabackup/3307/…..inc

注:最后一次的合并操作中不需要添加–redo-only参数。

4.这里需要对全备,再做一次apply-log,网上很多都没有这步,但官方文档上有

innobackupex –apply-log /home/backup/BackupDir_xtrabackup/3307/…full

5.停止mysql服务

恢复时需要停掉MySQL,并且数据目录必须为空,所以,我们需要多原有的数据目录进行备份,最简单方式:mv data data_1011_bak

然后,再新建一个数据目录:mkdir data

6. 恢复数据。

innobackupex –defaults-file=/home/backup/conf/my3307.cnf –copy-back /home/backup/BackupDir_xtrabackup/3307/…full

7.权限设置

恢复完成后,需要对数据目录设置mysql权限

chown -R mysql:mysql /data/

8.启动mysql实例

9. 查看是否恢复成功,这里恢复算完成了,但是,实际情况下,我们还需要根据xtrbackup_binlog_info的信息去恢复 binlog的部分数据,这个环节网上也没有提到,所以,刚才对数据目录的备份就十分有用,这里,就不做演示,相信基于binlog的恢复,应该都十分熟练了

git命令的日常使用

最近,由于工作繁琐,博客好久没有更新了,今天来更新一把~~
目前,说的比较多的技术有docker,云平台,自动化运维,大数据等,还有一些宕机误删除等八卦新闻
github 已经火了很长时间了,我们有必要了解一下基本使用方法。
目前,国内用的比较多的代码托管平台如下:
        开源中国代码托管平台:http://git.oschina.net/
        csdn 代码托管平台:http://code.csdn.net/
国外比较出名的,无非是github:https://github.com/
linux 用户,可以直接yum 安装git,windows 用户,可能需要根据自己机器系统下载对应版本,windows 的git有中文版哦~~
下面,就说说一些基本使用:
1.当我们首次在自己机器上使用时,需要配置用户名和密码:
      $ git config –global user.name “Michael.Xu”
      $ git config –global user.email “Michael.Xu@haowu.com”
2.配置编辑器:(这一步windows用户可以不做)
你的标识已经设置,你可以配置你的缺省文本编辑器,Git在需要你输入一些消息时会使用该文本编辑器。缺省情况下,Git使用你的系统的缺省编辑器,这通常可能是vi 或者 vim。如果你想使用一个不同的文本编辑器,例如Emacs,你可以做如下操作:
      $ git config –global core.editor emacs
3.配置比较工具:
另外一个你可能需要配置的有用的选项是缺省的比较工具它用来解决合并时的冲突。例如,你想使用vimdiff:
      $ git config –global merge.tool vimdiff
Git可以接受kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 和 opendiff作为有效的合并工具。你也可以设置一个客户化的工具;
4.检查配置:
如果你想检查你的设置,你可以使用 git config –list 命令来列出Git可以在该处找到的所有的设置:
    $ git config –list
         user.name=Michael.Xu
         user.email=Michael.Xu@haowu.com
         color.status=auto
         color.branch=auto
         color.interactive=auto
         color.diff=auto
5.克隆一个git:
  001497@HW001497 MINGW64 /f/python/web/flask/hr/hr (master)
  $ git clone https://git.oschina.net/michael-mysql/hr.git
6.查看当前状态:
  001497@HW001497 MINGW64 /f/python/web/flask/hr/hr (master)
  $ git status
  On branch master
  Your branch is up-to-date with ‘origin/master’.
  nothing to commit, working directory clean
7.如果有文件修改,添加文件:
  001497@HW001497 MINGW64 /f/python/web/flask/hr/hr (master)
  $ git add *
  8.提交你的更改:
  001497@HW001497 MINGW64 /f/python/web/flask/hr/hr (master)
  $ git commit -m “20150923_1a”
  On branch master
  Your branch is ahead of ‘origin/master’ by 1 commit.
    (use “git push” to publish your local commits)
  nothing to commit, working directory clean
9.推送到 服务端:
  001497@HW001497 MINGW64 /f/python/web/flask/hr/hr (master)
  $ git push origin master
  Username for ‘https://git.oschina.net’: ********
  Password for ‘https://*******@git.oschina.net’:
  Counting objects: 16, done.
  Delta compression using up to 2 threads.
  Compressing objects: 100% (16/16), done.
  Writing objects: 100% (16/16), 2.26 KiB | 0 bytes/s, done.
  Total 16 (delta 9), reused 0 (delta 0)
  To https://git.oschina.net/michael-mysql/hr.git
     3c6da84..3ab7849  master -> master
# 其它相关命令:
1.新建仓库,初始化操作
     创建文件夹,进入,执行:git init
2.创建分支:
     git checkout -b “分支名”
3.切换回主分支:
     git checkout master
4.删除新建分支:
     git branch -d “分支名”
5.推送分支:
     git push origin “分支名”
6.更新本地仓库:
     git pull
7.合并其它分支到当前分支:
     git merge “分支名”
8.日志:
     git log