M63-第十二周作業(yè)

1、主從復(fù)制及主主復(fù)制的實(shí)現(xiàn)

主從復(fù)制

Linux:Master / Centos7.9 , Slave / Centos7.9

Mysql:Master / 5.7 ,Master /?5.7

IP:192.168.18.131192.168.18.133

主節(jié)點(diǎn)配置文件

[mysqld]

server-id=1? #為當(dāng)前節(jié)點(diǎn)設(shè)置一個(gè)全局惟的ID號 log-bin #啟用二進(jìn)制日志 datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

從節(jié)點(diǎn)配置文件:

[mysqld]

server-id=2 #為當(dāng)前節(jié)點(diǎn)設(shè)置一個(gè)全局惟的ID號(不能和主節(jié)點(diǎn)一樣)

log-bin #啟用二進(jìn)制日志

read_only=ON #限制從數(shù)據(jù)庫為只讀,針對supper user無效

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

查看主節(jié)點(diǎn)當(dāng)前的二進(jìn)制文件名及位置:

SHOW MASTER STATUS;

centos7-bin.000002? 708

在主機(jī)點(diǎn)上創(chuàng)建有復(fù)制權(quán)限的用戶賬號?:

GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.10.%' IDENTIFIED BY '123456';

#生產(chǎn)中不建議使用root賬戶

?在從節(jié)點(diǎn)上使用有復(fù)制權(quán)限的用戶賬號連接至主服務(wù)器,并啟動復(fù)制線程?

CHANGE MASTER TO

MASTER_HOST='192.168.18.131',

MASTER_USER=‘root’,

MASTER_PASSWORD='123456'

MASTER_PORT=3306

MASTER_LOG_FOLE='centos-bin.000002',

MASTER_LOG_POS=708;


start slave;

查看從節(jié)點(diǎn)IO線程及SQL線程

show slave status \G


上面的兩個(gè)進(jìn)程都顯示YES則表示配置成功

驗(yàn)證

主節(jié)點(diǎn)創(chuàng)建數(shù)據(jù)庫和表

create database db1;

use db1;

create table lol(id int);

從節(jié)點(diǎn)查看已同步

show databases;


use db1

show tables;


主主復(fù)制

兩個(gè)mysql服務(wù)器互為主從

在剛剛的主從復(fù)制環(huán)境下稍加修改即可。

131主機(jī)配置文件修改如下:

[mysqld]

server_id=1

log-bin

auto_increment_offset=1 #設(shè)置自動增長的字段的偏移量,即初始值為1

auto_increment_increment=2 #增長幅度

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

133主機(jī)配置文件修改如下:

[mysqld]

server_id=2

log-bin

auto_increment_offset=2 #設(shè)置自動增長的字段的偏移量,即初始值為2

auto_increment_increment=2 #增長幅度

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock


注:其中只有server_id不同和 auto-increment- offset不同

auto-increment-increment的值應(yīng)設(shè)為整個(gè)結(jié)構(gòu)中服務(wù)器的總數(shù),此次實(shí)驗(yàn)環(huán)境只用到兩

臺服務(wù)器,所以值設(shè)為2。

?重啟mysql使配置生效;

查看133主機(jī)當(dāng)前的二進(jìn)制文件名及位置,用于131主機(jī)連接時(shí)使用:

show master logs;


兩個(gè)服務(wù)器上分別執(zhí)行創(chuàng)建一個(gè)用于主從復(fù)制的賬號,給與REPLICATION SLAVE權(quán)限。

131主機(jī)上文已經(jīng)創(chuàng)建過,且133主機(jī)也已經(jīng)同步,故這里不再創(chuàng)建;

配置連接master的相關(guān)信息

在slave中指定master相關(guān)參數(shù),并開啟slave線程;

在主從復(fù)制中133主機(jī)已經(jīng)配置過相關(guān)參數(shù),現(xiàn)在只需在131主機(jī)上配置即可。

mysql> CHANGE MASTER TO

? ? -> MASTER_HOST='192.168.18.133',

? ? ->? MASTER_USER='root',

? ? -> MASTER_PASSWORD='123456',

? ? -> MASTER_PORT=3306,

? ? -> MASTER_LOG_FILE='centos7-bin.000004', #指定133主機(jī)的二進(jìn)制文件

? ? -> MASTER_LOG_POS=154; #指定(在master二進(jìn)制文件中)要開始復(fù)制的位置


mysql> start slave;

start slave;

show slave status \G


查看從節(jié)點(diǎn)IO線程及SQL線程狀態(tài)為:YES,說明同步開啟成功。

最后進(jìn)行測試驗(yàn)證:

#在131主機(jī)執(zhí)行

mysql> create table test1(id int auto_increment primary key,name char(8));

mysql> insert test1 (name) values('vn');

#在133主機(jī)執(zhí)行

mysql> insert test1 (name) values('ez');

#驗(yàn)證

mysql> select * from test1;

+----+------+

| id | name |

+----+------+

|? 1 | vn? |

|? 2 | ez? |

+----+------+

至此,主主同步環(huán)境也已經(jīng)實(shí)現(xiàn)!



2、xtrabackup實(shí)現(xiàn)全量+增量+binlog恢復(fù)庫

1.下載并安裝xtrabackup包

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm

yum -y install? percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm


2.?在原主機(jī)做完全備份到/backup

[root@centos7 ~]#mkdir /backup[root@centos7 ~]#xtrabackup -uroot -p123456 --backup --target-dir=/backup/base


目標(biāo)主機(jī)無需創(chuàng)建/backup目錄,直接復(fù)制目錄本身

[root@centos7 ~]#scp -r /backup/?目標(biāo)主機(jī):/backup1


?3. 在目標(biāo)主機(jī)上還原

1)預(yù)準(zhǔn)備:確保數(shù)據(jù)一致,提交完成的事務(wù),回滾未完成的事務(wù)

[root@centos7 ~]#xtrabackup --prepare --target-dir=/backup1/base

2)復(fù)制到數(shù)據(jù)庫目錄

注意:數(shù)據(jù)庫目錄必須為空,MySQL服務(wù)不能啟動

[root@centos7 ~]#xtrabackup --copy-back --target-dir=/backup1/base

3)還原屬性[root@centos7 ~]#chown -R mysql:mysql /data/mysql

4)啟動服務(wù)[root@centos7 ~]#systemctl start? mysqld

?4.驗(yàn)證

?可以查看到目標(biāo)主機(jī)數(shù)據(jù)庫已被還原:



增量+binlog還原

新增數(shù)據(jù)

第一次增量備份

[root@centos7 ~]#xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base

再次新增數(shù)據(jù)

第二次增量備份

xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1


拷貝到還原主機(jī)

[root@centos7 ~]#scp -r /backup/ 192.168.18.133:/backup/

備份過程生成三個(gè)備份目錄

/backup/{base,inc1,inc2}

?備份主機(jī)開始還原

1)預(yù)準(zhǔn)備完成備份,此選項(xiàng)--apply-log-only 阻止回滾未完成的事務(wù)

[root@centos7 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base

2)合并第1次增量備份到完全備份

[root@centos7 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1

3)合并第2次增量備份到完全備份:最后一次還原不需要加選項(xiàng)--apply-log-only

[root@centos7 ~]#xtrabackup --prepare --target-dir=/backup/base --incrementaldir=/backup/inc2

4)復(fù)制到數(shù)據(jù)庫目錄,注意數(shù)據(jù)庫目錄必須為空,MySQL服務(wù)不能啟動

[root@centos7 ~]#xtrabackup --copy-back --target-dir=/backup/base

5)還原屬性:chown-R mysql.mysql /data/mysql

6)啟動服務(wù):[root@centos7 ~]#systemctl start mysqld

驗(yàn)證

?可以查看到目標(biāo)主機(jī)數(shù)據(jù)庫已被還原:


截至第二次增備的數(shù)據(jù)都已經(jīng)恢復(fù),但是第二次增備后原數(shù)據(jù)庫還有可能會寫入數(shù)據(jù)

第二次增備后新增數(shù)據(jù):

這時(shí)需要用binlog來進(jìn)行還原

查看二次增備后的binlog 的位置


#將二進(jìn)制日志拷貝到備份主機(jī)

[root@centos7 ~]scp centos7-bin.000002 192.168.18.133:/backup/

#應(yīng)用Binlog

[root@centos7 backup]# mysqlbinlog /backup/centos7-bin.000002 --start-position=1749 >/backup/binlog.sql

[root@centos7 backup]# mysql -p123456mysql>setsql_log_bin=0;#關(guān)閉Binlog

mysql>source/backup/binlog.sql

mysql>setsql_log_bin=1;#開啟Binlog

驗(yàn)證數(shù)據(jù)

到此利用?xtrabackup+binlog的完全恢復(fù)已經(jīng)完成。

3、MyCAT實(shí)現(xiàn)MySQL讀寫分離

實(shí)驗(yàn)拓?fù)洌?/p>

? ? ? ? mycat? ? ? ?

? ? ? ? ? /? ? \??

master -- slave (主從復(fù)制)

mycat: 192.168.0.121

master: 192.168.0.120

slave:? 192.168.0.122

Mycat 提供了編譯好的安裝包,下載地址:?htt$p://dl/my$cat.io? ?刪除$

Mycat 官方首頁:? htt$p://my$cat.org.cn? ?刪除$

Index of /

../

1.6-RELEASE/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 28-Oct-2016 12:56? ? ? ? ? ? ? ? ? -

1.6.5-DEV/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 15-Jan-2017 07:10? ? ? ? ? ? ? ? ? -

2.0-dev/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 02-Jan-2017 07:24? ? ? ? ? ? ? ? ? -

mycat-web-1.0/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 02-Jan-2017 07:40? ? ? ? ? ? ? ? ? -

yum/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 18-May-2016 02:51? ? ? ? ? ? ? ? ? -

Mycat-server-1.4-beta-20150604171601-linux.tar.gz? 27-Jun-2015 10:09? ? ? ? ? ? 7663894

apache-maven-3.3.3-bin.tar.gz? ? ? ? ? ? ? ? ? ? ? 27-Jun-2015 10:09? ? ? ? ? ? 8042383

apache-tomcat-7.0.62.tar.gz? ? ? ? ? ? ? ? ? ? ? ? 27-Jun-2015 10:09? ? ? ? ? ? 8824528

jdk-7u79-linux-x64.tar.gz? ? ? ? ? ? ? ? ? ? ? ? ? 27-Jun-2015 10:09? ? ? ? ? 153512879

jdk-8u20-linux-x64.tar.gz? ? ? ? ? ? ? ? ? ? ? ? ? 27-Jun-2015 10:09? ? ? ? ? 160872342

phpMyAdmin-4.4.9-all-languages.tar.gz? ? ? ? ? ? ? 27-Jun-2015 10:09? ? ? ? ? ? 9352049

probe-2.3.3.zip? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 27-Jun-2015 10:09? ? ? ? ? ? 7957290

toolset.sh? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 26-Oct-2015 05:03? ? ? ? ? ? ? 16015

zookeeper-3.4.6.tar.gz


wget 一下 Mycat-server 1.6 和 jdk-7u79 兩個(gè)包:

wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

wget http://dl.mycat.io/jdk-7u79-linux-x64.tar.gz

[root@vm2 ~]# ll -h Mycat* jdk*

-rw-r--r-- 1 root root 147M Jun 27? 2015 jdk-7u79-linux-x64.tar.gz

-rw-r--r-- 1 root root 7.4M Jun 27? 2015 Mycat-server-1.4-beta-20150604171601-linux.tar.gz

Mycat-server 包解壓后可直接使用。

tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

其目錄結(jié)構(gòu)是這樣的:

[root@vm2 local]# tree -L 1 mycat

mycat

|-- bin

|-- catlet

|-- conf

|-- lib

|-- logs

`-- version.txt

5 directories, 1 file

bin 目錄中是可執(zhí)行文件以及腳本,我們可以使用其中的 mycat 腳本控制mycat的啟動和關(guān)閉。

conf 目錄中是配置文件,這里配置讀寫分離主要使用 schema.xml 和 server.xml。其他配置分片的配置請參考官方文檔。

logs 目錄存放日志文件,遇到mycat出錯了,就在這里查看問題的原因。

安裝 jdk

mkdir /usr/java

tar -xf jdk-7u79-linux-x64.tar.gz -C /usr/java

[root@vm2 logs]# cat /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.7.0_79

export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile.d/java.sh

[root@vm2 logs]# java -version

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)


完成。

這里只講解一下讀寫分離用到的配置文件:server.xml, schema.xml。

前提:已經(jīng)有一個(gè)配置好的 mysql 一主一從架構(gòu)。

一個(gè)主從集群在Mycat里面由一個(gè) dataNode 定義,dataNode 定義了一個(gè)數(shù)據(jù)庫實(shí)例及其中的一個(gè)具體的庫。Mycat 的一個(gè)數(shù)據(jù)庫實(shí)例可以實(shí)際上是一個(gè)主從復(fù)制架構(gòu):一主多從,一主一從,多主多從等等,具體在 dataHost 中定義。

這里建立一個(gè)非拆分庫(將mycat邏輯庫綁定到一個(gè)具體的 dataNode 上)testdb,綁定到 dn1 這個(gè) dataNode 上。

schema.xml:

<schemaname="testdb"checkSQLschema="false"sqlMaxLimit="100"dataNode="dn1">

</schema>

現(xiàn)在所有的表會走默認(rèn)的節(jié)點(diǎn) dn1。邏輯庫 testdb,對應(yīng)了數(shù)據(jù)節(jié)點(diǎn) dn1。dn1 對應(yīng)著真實(shí)的數(shù)據(jù)庫實(shí)例上的一個(gè)真實(shí)的庫。

<dataNodename="dn1"dataHost="vm3306"database="db1">

</dataNode>

定義數(shù)據(jù)節(jié)點(diǎn),dn1,這個(gè)節(jié)點(diǎn)對應(yīng)一個(gè)數(shù)據(jù)庫實(shí)例中的一個(gè)真實(shí)的庫,庫名為 db1。

dataNode 標(biāo)簽定義了 MyCat 中的數(shù)據(jù)節(jié)點(diǎn),也就是我們通常說所的數(shù)據(jù)分片。一個(gè) dataNode 標(biāo)簽就是 一個(gè)獨(dú)立的數(shù)據(jù)分片。

例子中所表述的意思為:使用名字為 vm3306 數(shù)據(jù)庫實(shí)例上的 db1 物理數(shù)據(jù)庫,這就組成一個(gè)數(shù)據(jù)分片,最 后,我們使用名字 dn1 標(biāo)識這個(gè)分片。

該屬性用于定義該分片屬性哪個(gè)具體數(shù)據(jù)庫實(shí)例上的具體庫,因?yàn)檫@里使用兩個(gè)緯度來定義分片,就是:實(shí) 例+具體的庫。因?yàn)槊總€(gè)庫上建立的表和表結(jié)構(gòu)是一樣的。所以這樣做就可以輕松的對表進(jìn)行水平拆分。

dataHost: 包含一個(gè) writeHost 和 一個(gè) readHost,它們之前已經(jīng)配置好主從復(fù)制了。

balance="3":表示寫請求只發(fā)給節(jié)點(diǎn),讀請求只發(fā)給讀節(jié)點(diǎn)。

<dataHost name="vm3306" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">

? ? <heartbeat>select user()</heartbeat>

? ? <!-- can have multi write hosts -->

? ? <writeHost host="hostM1" url="192.168.0.120:3306" user="tuser" password="guli123">

? ? ? ? <!-- can have multi read hosts -->

? ? ? ? <readHost host="hostS1" url="192.168.0.122:3306" user="tuser" password="guli123"/>

? ? </writeHost>

? ? <!-- <writeHost host="hostM2" url="localhost:3316" user="tuser" password="guli123"/> -->

</dataHost>

user 及 password屬性是后端主從mysql的賬戶密碼信息。

dataHost屬性說明:

writeType="0", 所有寫操作發(fā)送到配置的第一個(gè) writeHost,第一個(gè)掛了切到還生存的第二個(gè) writeHost,重新啟動后已切換后的為準(zhǔn),切換記錄在配置文件中:dnindex.properties .

balance="3",所有讀請求隨機(jī)的分發(fā)到 wiriterHost 對應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力,注意 balance=3 只在 1.4 及其以后版本有,1.3 沒有。

server.xml 配置:

<user name="test">

? ? ? ? ? ? <property name="password">test</property>

? ? ? ? ? ? <property name="schemas">testdb</property>

? ? </user>

? ? <user name="user">

? ? ? ? ? ? <property name="password">user</property>

? ? ? ? ? ? <property name="schemas">testdb</property>

? ? ? ? ? ? <property name="readOnly">true</property>

? ? </user>

我們在主從 mysql 中創(chuàng)建測試用戶 tuser,賦予增刪改查,創(chuàng)建庫和表的權(quán)限。

master:

mysql> GRANT CREATE,DELETE,INSERT,SELECT,UPDATE ON db1.* TO 'tuser'@'192.168.0.%' IDENTIFIED BY 'guli123';

啟動 mycat:

cd /usr/local/mycat/bin

./mycat start

啟動 mycat 遇到第一個(gè)日志報(bào)錯,在 logs/wrapper.log 看到如下錯誤:

ERROR | wrapper | 2017/01/23 17:19:28 | JVM exited while loading the application.

INFO? | jvm 5? ? | 2017/01/23 17:19:28 | 錯誤: 代理拋出異常錯誤: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: vm2: vm2: 未知的名稱或服務(wù)

提示說沒有足夠的內(nèi)存來啟動 Java 運(yùn)行時(shí)環(huán)境,因?yàn)槲矣玫奶摂M機(jī),給了 512M 內(nèi)存,所以內(nèi)存不夠,重新分配了1.5G,就不會報(bào)這個(gè)錯了。

啟動 mycat 遇到第二個(gè)日志報(bào)錯,在 logs/wrapper.log 看到如下錯誤:

[root@vm2 logs]# tail -f wrapper.log:

ERROR|wrapper|2017/01/2317:19:28|JVMexitedwhileloading the application.INFO|jvm5|2017/01/2317:19:28|錯誤:代理拋出異常錯誤:java.net.MalformedURLException:Localhost name unknown:java.net.UnknownHostException:vm2:vm2:未知的名稱或服務(wù)

錯誤提示,可能沒有配置好本地主機(jī)名的名稱解析。

添加本地主機(jī)名解析:

[root@vm2 bin]# cat /etc/hosts

127.0.0.1? localhost localhost.localdomain localhost4 localhost4.localdomain4

::1? ? ? ? localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.121 vm2

再次嘗試啟動:

# ./mycat start

查看日志 wrapper.log:

INFO | jvm 1 | 2017/01/23 17:24:40 | log4j 2017-01-23 17:24:40 [./conf/log4j.xml] load completed.

INFO? | jvm 1? ? | 2017/01/23 17:24:41 | MyCAT Server startup successfully. see logs in logs/mycat.log

顯示啟動成功,這次OK了。

Mycat 管理命令與監(jiān)控

1. 管理命令

mysql -h127.0.0.1 -utest -ptest -P9066

MyCAT 自身有類似其他數(shù)據(jù)庫的管理監(jiān)控方式,可以通過 Mysql 命令行,登錄管理端口(9066)執(zhí)行相應(yīng) 的 SQL 進(jìn)行管理,也可以通過 jdbc 的方式進(jìn)行遠(yuǎn)程連接管理,本小節(jié)主要講解命令行的管理操作。

登錄:目前 mycat 有兩個(gè)端口,8066 數(shù)據(jù)端口,9066 管理端口,命令行的登陸是通過 9066 管理端口來操 作,登錄方式類似于 mysql 的服務(wù)端登陸。

mysql -h127.0.0.1 -utest -ptest -P9066 [-dmycat]

-h 后面是主機(jī),即當(dāng)前 mycat 按照的主機(jī)地址,本地可用 127.0.0.1 遠(yuǎn)程需要遠(yuǎn)程 ip -u Mycat server.xml 中配置的邏輯庫用戶

-p Mycat server.xml 中配置的邏輯庫密碼

-P 后面是端口 默認(rèn) 9066,注意 P 是大寫

-d Mycat server.xml 中配置的邏輯庫

數(shù)據(jù)端口與管理端口的配置端口修改:數(shù)據(jù)端口默認(rèn) 8066,管理端口默認(rèn) 9066 ,如果需要修改需要配置 server.xml

管理端口用于執(zhí)行管理命令:

mysql -h127.0.0.1 -utest -ptest -P9066

命令端口用戶執(zhí)行增刪改查等 SQL 語句:

mysql -h127.0.0.1 -utest -ptest -P8066

下面先看看管理端口支持的命令。

從 9066 管理端口登陸后,執(zhí)行 show @@help 可以查看到所有命令:

mysql> show @@help;

+------------------------------------------+--------------------------------------------+

| STATEMENT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | DESCRIPTION? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+------------------------------------------+--------------------------------------------+

| show @@time.current? ? ? ? ? ? ? ? ? ? ? | Report current timestamp? ? ? ? ? ? ? ? ? |

| show @@time.startup? ? ? ? ? ? ? ? ? ? ? | Report startup timestamp? ? ? ? ? ? ? ? ? |

| show @@version? ? ? ? ? ? ? ? ? ? ? ? ? | Report Mycat Server version? ? ? ? ? ? ? ? |

| show @@server? ? ? ? ? ? ? ? ? ? ? ? ? ? | Report server status? ? ? ? ? ? ? ? ? ? ? |

| show @@threadpool? ? ? ? ? ? ? ? ? ? ? ? | Report threadPool status? ? ? ? ? ? ? ? ? |

| show @@database? ? ? ? ? ? ? ? ? ? ? ? ? | Report databases? ? ? ? ? ? ? ? ? ? ? ? ? |

| show @@datanode? ? ? ? ? ? ? ? ? ? ? ? ? | Report dataNodes? ? ? ? ? ? ? ? ? ? ? ? ? |

| show @@datanode where schema = ?? ? ? ? | Report dataNodes? ? ? ? ? ? ? ? ? ? ? ? ? |

| show @@datasource? ? ? ? ? ? ? ? ? ? ? ? | Report dataSources? ? ? ? ? ? ? ? ? ? ? ? |

| show @@datasource where dataNode = ?? ? | Report dataSources? ? ? ? ? ? ? ? ? ? ? ? |

| show @@datasource.synstatus? ? ? ? ? ? ? | Report datasource data synchronous? ? ? ? |

| show @@datasource.syndetail where name=? | Report datasource data synchronous detail? |

| show @@datasource.cluster? ? ? ? ? ? ? ? | Report datasource galary cluster variables |

| show @@processor? ? ? ? ? ? ? ? ? ? ? ? | Report processor status? ? ? ? ? ? ? ? ? ? |

| show @@command? ? ? ? ? ? ? ? ? ? ? ? ? | Report commands status? ? ? ? ? ? ? ? ? ? |

| show @@connection? ? ? ? ? ? ? ? ? ? ? ? | Report connection status? ? ? ? ? ? ? ? ? |

| show @@cache? ? ? ? ? ? ? ? ? ? ? ? ? ? | Report system cache usage? ? ? ? ? ? ? ? ? |

| show @@backend? ? ? ? ? ? ? ? ? ? ? ? ? | Report backend connection status? ? ? ? ? |

| show @@session? ? ? ? ? ? ? ? ? ? ? ? ? | Report front session details? ? ? ? ? ? ? |

| show @@connection.sql? ? ? ? ? ? ? ? ? ? | Report connection sql? ? ? ? ? ? ? ? ? ? ? |

| show @@sql.execute? ? ? ? ? ? ? ? ? ? ? | Report execute status? ? ? ? ? ? ? ? ? ? ? |

| show @@sql.detail where id = ?? ? ? ? ? | Report execute detail status? ? ? ? ? ? ? |

| show @@sql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | Report SQL list? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| show @@sql.high? ? ? ? ? ? ? ? ? ? ? ? ? | Report Hight Frequency SQL? ? ? ? ? ? ? ? |

| show @@sql.slow? ? ? ? ? ? ? ? ? ? ? ? ? | Report slow SQL? ? ? ? ? ? ? ? ? ? ? ? ? ? |

| show @@sql.resultset? ? ? ? ? ? ? ? ? ? | Report BIG RESULTSET SQL? ? ? ? ? ? ? ? ? |

| show @@sql.sum? ? ? ? ? ? ? ? ? ? ? ? ? | Report? User RW Stat? ? ? ? ? ? ? ? ? ? ? |

| show @@sql.sum.user? ? ? ? ? ? ? ? ? ? ? | Report? User RW Stat? ? ? ? ? ? ? ? ? ? ? |

| show @@sql.sum.table? ? ? ? ? ? ? ? ? ? | Report? Table RW Stat? ? ? ? ? ? ? ? ? ? ? |

| show @@parser? ? ? ? ? ? ? ? ? ? ? ? ? ? | Report parser status? ? ? ? ? ? ? ? ? ? ? |

| show @@router? ? ? ? ? ? ? ? ? ? ? ? ? ? | Report router status? ? ? ? ? ? ? ? ? ? ? |

| show @@heartbeat? ? ? ? ? ? ? ? ? ? ? ? | Report heartbeat status? ? ? ? ? ? ? ? ? ? |

| show @@heartbeat.detail where name=?? ? | Report heartbeat current detail? ? ? ? ? ? |

| show @@slow where schema = ?? ? ? ? ? ? | Report schema slow sql? ? ? ? ? ? ? ? ? ? |

| show @@slow where datanode = ?? ? ? ? ? | Report datanode slow sql? ? ? ? ? ? ? ? ? |

| show @@sysparam? ? ? ? ? ? ? ? ? ? ? ? ? | Report system param? ? ? ? ? ? ? ? ? ? ? ? |

| show @@syslog limit=?? ? ? ? ? ? ? ? ? ? | Report system mycat.log? ? ? ? ? ? ? ? ? ? |

| show @@white? ? ? ? ? ? ? ? ? ? ? ? ? ? | show mycat white host? ? ? ? ? ? ? ? ? ? ? |

| show @@white.set=?,?? ? ? ? ? ? ? ? ? ? | set mycat white host,[ip,user]? ? ? ? ? ? |

| show @@directmemory=1 or 2? ? ? ? ? ? ? | show mycat direct memory usage? ? ? ? ? ? |

| switch @@datasource name:index? ? ? ? ? | Switch dataSource? ? ? ? ? ? ? ? ? ? ? ? ? |

| kill @@connection id1,id2,...? ? ? ? ? ? | Kill the specified connections? ? ? ? ? ? |

| stop @@heartbeat name:time? ? ? ? ? ? ? | Pause dataNode heartbeat? ? ? ? ? ? ? ? ? |

| reload @@config? ? ? ? ? ? ? ? ? ? ? ? ? | Reload basic config from file? ? ? ? ? ? ? |

| reload @@config_all? ? ? ? ? ? ? ? ? ? ? | Reload all config from file? ? ? ? ? ? ? ? |

| reload @@route? ? ? ? ? ? ? ? ? ? ? ? ? | Reload route config from file? ? ? ? ? ? ? |

| reload @@user? ? ? ? ? ? ? ? ? ? ? ? ? ? | Reload user config from file? ? ? ? ? ? ? |

| reload @@sqlslow=? ? ? ? ? ? ? ? ? ? ? ? | Set Slow SQL Time(ms)? ? ? ? ? ? ? ? ? ? ? |

| reload @@user_stat? ? ? ? ? ? ? ? ? ? ? | Reset show @@sql? @@sql.sum @@sql.slow? ? |

| rollback @@config? ? ? ? ? ? ? ? ? ? ? ? | Rollback all config from memory? ? ? ? ? ? |

| rollback @@route? ? ? ? ? ? ? ? ? ? ? ? | Rollback route config from memory? ? ? ? ? |

| rollback @@user? ? ? ? ? ? ? ? ? ? ? ? ? | Rollback user config from memory? ? ? ? ? |

| reload @@sqlstat=open? ? ? ? ? ? ? ? ? ? | Open real-time sql stat analyzer? ? ? ? ? |

| reload @@sqlstat=close? ? ? ? ? ? ? ? ? | Close real-time sql stat analyzer? ? ? ? ? |

| offline? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | Change MyCat status to OFF? ? ? ? ? ? ? ? |

| online? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | Change MyCat status to ON? ? ? ? ? ? ? ? ? |

| clear @@slow where schema = ?? ? ? ? ? ? | Clear slow sql by schema? ? ? ? ? ? ? ? ? |

| clear @@slow where datanode = ?? ? ? ? ? | Clear slow sql by datanode? ? ? ? ? ? ? ? |

+------------------------------------------+--------------------------------------------+

58 rows in set (0.00 sec)

查看 mycat 版本:

mysql> show @@version;

+-----------------------------------------+

| VERSION? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+-----------------------------------------+

| 5.6.29-mycat-1.6-RELEASE-20161028204710 |

+-----------------------------------------+

1 row in set (0.00 sec)

查看當(dāng)前的庫:

mysql> show @@database;

+----------+

| DATABASE |

+----------+

| testdb? |

+----------+

1 row in set (0.00 sec)

查看 MyCAT 的數(shù)據(jù)節(jié)點(diǎn)的列表,對應(yīng) schema.xml 配置文件的 dataNode 節(jié)點(diǎn):

mysql> show @@datanode;

+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+

| NAME | DATHOST? ? | INDEX | TYPE? | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |

+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+

| dn1? | vm3306/db1 |? ? 0 | mysql |? ? ? 0 |? ? 8 | 1000 |? ? 244 |? ? ? ? ? 0 |? ? ? ? 0 |? ? ? 0 |? ? ? ? ? ? -1 |

+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+

1 row in set (0.00 sec)

其中,“NAME”表示 dataNode 的名稱;“dataHost”表示對應(yīng) dataHost 屬性的值,即數(shù)據(jù)主機(jī); “ACTIVE”表示活躍連接數(shù);“IDLE”表示閑置連接數(shù);“SIZE”對應(yīng)總連接數(shù)量。

這里有 8 個(gè)空閑連接,那我們?nèi)ブ鲝墓?jié)點(diǎn)用 netstat -ntp 命令看看建立的連接情況:

master:

[root@vm1 ~]# netstat -ntp

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address? ? ? ? ? ? ? Foreign Address? ? ? ? ? ? State? ? ? PID/Program name

tcp? ? ? ? 0? ? ? 0 192.168.0.120:22? ? ? ? ? ? 192.168.0.104:60060? ? ? ? ESTABLISHED 1492/sshd

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58636? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58640? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58582? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58644? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58646? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58641? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58635? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.121:58632? ESTABLISHED 1414/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.120:3306? ::ffff:192.168.0.122:48205? ESTABLISHED 1414/mysqld

slave:

[root@vm3 ~]# netstat -ntp

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address? ? ? ? ? ? ? Foreign Address? ? ? ? ? ? State? ? ? PID/Program name

tcp? ? ? ? 0? ? ? 0 192.168.0.122:48205? ? ? ? 192.168.0.120:3306? ? ? ? ? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 192.168.0.122:22? ? ? ? ? ? 192.168.0.104:60102? ? ? ? ESTABLISHED 1196/sshd

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45593? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45591? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45583? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45589? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45579? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45580? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45588? ESTABLISHED 1607/mysqld

tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.0.122:3306? ::ffff:192.168.0.121:45577? ESTABLISHED 1607/mysqld

可看到有很多從 mycat 服務(wù)器發(fā)起數(shù)據(jù)庫連接(主有9個(gè)連接,從有8個(gè)連接)。

查看心跳報(bào)告:

mysql> show @@heartbeat;

+--------+-------+---------------+------+---------+-------+--------+---------+--------------+---------------------+-------+

| NAME? | TYPE? | HOST? ? ? ? ? | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME? ? | STOP? |

+--------+-------+---------------+------+---------+-------+--------+---------+--------------+---------------------+-------+

| hostM1 | mysql | 192.168.0.120 | 3306 |? ? ? 1 |? ? 0 | idle? |? ? ? 0 | 1,1,1? ? ? ? | 2017-01-24 06:44:38 | false |

| hostS1 | mysql | 192.168.0.122 | 3306 |? ? ? 1 |? ? 0 | idle? |? ? ? 0 | 1,1,1? ? ? ? | 2017-01-24 06:44:38 | false |

+--------+-------+---------------+------+---------+-------+--------+---------+--------------+---------------------+-------+

2 rows in set (0.00 sec)

該命令用于報(bào)告心跳狀態(tài)

RS_CODE 狀態(tài):

? ? OK_STATUS = 1;正常狀態(tài)

? ? ERROR_STATUS = -1; 連接出錯

? ? TIMEOUT_STATUS = -2; 連接超時(shí)

? ? INIT_STATUS = 0; 初始化狀態(tài)

若節(jié)點(diǎn)故障,會連續(xù)默認(rèn) 5 個(gè)周期檢測,心跳連續(xù)失敗,就會變成-1,節(jié)點(diǎn)故障確認(rèn),然后可能發(fā)生切換

查看 Mycat 的前端連接狀態(tài),即應(yīng)用與 mycat 的連接:

mysql> show @@connection\G

*************************** 1. row ***************************

? ? PROCESSOR: Processor0

? ? ? ? ? ID: 1

? ? ? ? HOST: 127.0.0.1

? ? ? ? PORT: 9066

? LOCAL_PORT: 50317

? ? ? SCHEMA: NULL

? ? ? CHARSET: latin1:8

? ? ? NET_IN: 257

? ? ? NET_OUT: 6343

ALIVE_TIME(S): 1264

? RECV_BUFFER: 4096

? SEND_QUEUE: 0

? ? ? txlevel:

? autocommit:

1 row in set (0.00 sec)

從上面獲取到的連接 ID 屬性,可以手動殺掉某個(gè)連接。

kill@@connection id,id,id

顯示后端連接狀態(tài):

mysql> show @@backend\G

...

...

...

*************************** 16. row ***************************

processor: Processor0

? ? ? ? id: 4

? mysqlId: 8

? ? ? host: 192.168.0.122

? ? ? port: 3306

? ? l_port: 45583

? ? net_in: 7018

? net_out: 1646

? ? ? life: 6287

? ? closed: false

? borrowed: false

SEND_QUEUE: 0

? ? schema: db1

? charset: utf8:33

? txlevel: 3

autocommit: true

16 rows in set (0.00 sec)

一共有16個(gè)后端連接,這里截取最后一個(gè)。

顯示數(shù)據(jù)源:

mysql> show @@datasource;

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| DATANODE | NAME? | TYPE? | HOST? ? ? ? ? | PORT | W/R? | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| dn1? ? ? | hostM1 | mysql | 192.168.0.120 | 3306 | W? ? |? ? ? 0 |? ? 8 | 1000 |? ? 231 |? ? ? ? 0 |? ? ? ? ? 2 |

| dn1? ? ? | hostS1 | mysql | 192.168.0.122 | 3306 | R? ? |? ? ? 0 |? ? 8 | 1000 |? ? 211 |? ? ? ? 8 |? ? ? ? ? 0 |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

2 rows in set (0.00 sec)

可以看到主從信息。

2. 執(zhí)行SQL語句

mysql -h127.0.0.1 -utest -ptest -P8066

創(chuàng)建 tb1 表:

mysql> show databases;

+----------+

| DATABASE |

+----------+

| testdb? |

+----------+

1 row in set (0.00 sec)

mysql> use testdb;create table tb1 (id INT, name VARCHAR(20));

Database changed

Query OK, 0 rows affected (0.25 sec)

mysql> show tables;

+---------------+

| Tables_in_db1 |

+---------------+

| tb1? ? ? ? ? |

+---------------+

1 row in set (0.01 sec)

插入兩條數(shù)據(jù):

mysql> insert into tb1 values (1, 'guli'), (2, 'xie');

Query OK, 2 rows affected (0.03 sec)

Records: 2? Duplicates: 0? Warnings: 0

查看一下插入結(jié)果:

mysql> select * from tb1;

+------+------+

| id? | name |

+------+------+

|? ? 1 | guli |

|? ? 2 | xie? |

+------+------+

2 rows in set (0.00 sec)

沒問題。

再分別到主從節(jié)點(diǎn)看數(shù)據(jù)插入沒有:

master:

mysql> use db1;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+---------------+

| Tables_in_db1 |

+---------------+

| tb1? ? ? ? ? |

+---------------+

1 row in set (0.00 sec)

mysql> select * from tb1;

+------+------+

| id? | name |

+------+------+

|? ? 1 | guli |

|? ? 2 | xie? |

+------+------+

2 rows in set (0.00 sec)

slave:

mysql> use db1;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+---------------+

| Tables_in_db1 |

+---------------+

| tb1? ? ? ? ? |

+---------------+

1 row in set (0.00 sec)

mysql> select * from tb1;

+------+------+

| id? | name |

+------+------+

|? ? 1 | guli |

|? ? 2 | xie? |

+------+------+

2 rows in set (0.00 sec)

好,可以看到 OK 了。

查看剛才執(zhí)行過的 sql 語句:

mysql> show @@sql;

+------+------+---------------+--------------+-------------------+

| ID? | USER | START_TIME? ? | EXECUTE_TIME | SQL? ? ? ? ? ? ? |

+------+------+---------------+--------------+-------------------+

|? ? 1 | test | 1485212346188 |? ? ? ? ? ? 1 | select * from tb1 |

|? ? 2 | test | 1485212040101 |? ? ? ? ? ? 1 | select * from tb1 |

|? ? 3 | test | 1485211834831 |? ? ? ? ? ? 1 | select * from tb1 |

|? ? 4 | test | 1485211803688 |? ? ? ? ? ? 1 | select * from tb1 |

|? ? 5 | test | 1485209518691 |? ? ? ? ? ? 2 | select * from tb1 |

+------+------+---------------+--------------+-------------------+

5 rows in set (0.00 sec)

查看統(tǒng)計(jì)數(shù)據(jù):

mysql> show @@sql.sum;

+------+------+------+------+------+------+--------+---------+--------------+--------------+---------------+

| ID? | USER | R? ? | W? ? | R%? | MAX? | NET_IN | NET_OUT | TIME_COUNT? | TTL_COUNT? ? | LAST_TIME? ? |

+------+------+------+------+------+------+--------+---------+--------------+--------------+---------------+

|? ? 1 | test |? ? 5 |? ? 0 | 1.00 | 1? ? |? ? 85 |? ? 709 | [5, 0, 0, 0] | [5, 0, 0, 0] | 1485212346189 |

+------+------+------+------+------+------+--------+---------+--------------+--------------+---------------+

1 row in set (0.00 sec)

端口號: 該命令工作在 9066 端口,用來記錄用戶通過本地 8066 端口向 Mycat-Server 發(fā)送的 SQL 請求執(zhí)行

信息。信息包括有 ID 值,執(zhí)行 SQL 語句的用戶名稱,執(zhí)行的 SQL 語句,命令執(zhí)行的起始時(shí)間,命令執(zhí)行消耗時(shí)間

查看慢查詢語句:

設(shè)置慢查詢閾值為0:reload @@sqlslow=0;

mysql> reload @@sqlslow=0;

Query OK, 1 row affected (0.00 sec)

Reset show? @@sql.slow time success

在8066端口執(zhí)行查詢:select * from tb1;

mysql> select * from tb1;

+------+-------+

| id? | name? |

+------+-------+

|? ? 1 | guli? |

|? ? 2 | xie? |

|? ? 3 | xu? ? |

|? ? 4 | he? ? |

|? ? 5 | huang |

|? ? 6 | ma? ? |

|? ? 7 | liu? |

|? ? 8 | zeng? |

+------+-------+

8 rows in set (0.00 sec)

在 9066 端口執(zhí)行 show @@sql.slow 查看抓取的慢查詢SQL語句:

mysql> show @@sql.slow;

+------+------------+---------------+--------------+-------------------+

| USER | DATASOURCE | START_TIME? ? | EXECUTE_TIME | SQL? ? ? ? ? ? ? |

+------+------------+---------------+--------------+-------------------+

| test | NULL? ? ? | 1485213017329 |? ? ? ? ? ? 1 | select * from tb1 |

+------+------------+---------------+--------------+-------------------+

1 row in set (0.00 sec)

3,如果要驗(yàn)證一下讀寫分離已經(jīng)成功了,應(yīng)該怎么驗(yàn)證呢?

使用mysql客戶端連接9066管理端口,執(zhí)行 show @@datasource 可以觀察到 READ_LOAD,WRITE_LOAD 兩個(gè)統(tǒng)計(jì)參數(shù)的變化:

這里顯示 hostM1 為寫節(jié)點(diǎn),hostS1 為讀節(jié)點(diǎn):

hostM1 的 WRITE_LOAD = 2

hostS1 的 READ_LOAD = 12

mysql> show @@datasource;

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| DATANODE | NAME? | TYPE? | HOST? ? ? ? ? | PORT | W/R? | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| dn1? ? ? | hostM1 | mysql | 192.168.0.120 | 3306 | W? ? |? ? ? 0 |? ? 8 | 1000 |? ? 287 |? ? ? ? 0 |? ? ? ? ? 2 |

| dn1? ? ? | hostS1 | mysql | 192.168.0.122 | 3306 | R? ? |? ? ? 0 |? ? 8 | 1000 |? ? 271 |? ? ? ? 12 |? ? ? ? ? 0 |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

2 rows in set (0.00 sec)

使用mysql客戶端連接8066管理端口,執(zhí)行查詢,插入語句,同時(shí)使用mysql客戶端連接 9066 端口觀察一下讀寫統(tǒng)計(jì)參數(shù)的變化:

8066:執(zhí)行查詢 select * from tb1;

mysql> select * from tb1;

+------+------+

| id? | name |

+------+------+

|? ? 1 | guli |

|? ? 2 | xie? |

|? ? 3 | xu? |

|? ? 4 | he? |

+------+------+

4 rows in set (0.00 sec)

9066:

mysql> show @@datasource;

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| DATANODE | NAME? | TYPE? | HOST? ? ? ? ? | PORT | W/R? | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| dn1? ? ? | hostM1 | mysql | 192.168.0.120 | 3306 | W? ? |? ? ? 0 |? ? 8 | 1000 |? ? 308 |? ? ? ? 0 |? ? ? ? ? 2 |

| dn1? ? ? | hostS1 | mysql | 192.168.0.122 | 3306 | R? ? |? ? ? 0 |? ? 8 | 1000 |? ? 293 |? ? ? ? 13 |? ? ? ? ? 0 |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

2 rows in set (0.00 sec)

讀節(jié)點(diǎn)的讀計(jì)數(shù)加1,

hostM1 的 WRITE_LOAD = 2

hostS1 的 READ_LOAD = 13

8066:執(zhí)行插入操作 insert into tb1 values (5,'huang');

mysql>insertintotb1 values(5,'huang');

QueryOK,1row affected(0.02sec)

9066:

mysql> show @@datasource;

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| DATANODE | NAME? | TYPE? | HOST? ? ? ? ? | PORT | W/R? | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

| dn1? ? ? | hostM1 | mysql | 192.168.0.120 | 3306 | W? ? |? ? ? 0 |? ? 8 | 1000 |? ? 332 |? ? ? ? 0 |? ? ? ? ? 4 |

| dn1? ? ? | hostS1 | mysql | 192.168.0.122 | 3306 | R? ? |? ? ? 0 |? ? 8 | 1000 |? ? 315 |? ? ? ? 13 |? ? ? ? ? 0 |

+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+

2 rows in set (0.00 sec)

寫節(jié)點(diǎn)的讀計(jì)數(shù)加2

hostM1 的 WRITE_LOAD = 2

hostS1 的 READ_LOAD = 13

由此可見讀寫分離是成功的??梢钥吹綌?shù)據(jù)也成功寫入數(shù)據(jù)庫:

mysql> select * from tb1;

+------+-------+

| id? | name? |

+------+-------+

|? ? 1 | guli? |

|? ? 2 | xie? |

|? ? 3 | xu? ? |

|? ? 4 | he? ? |

|? ? 5 | huang |

+------+-------+

5 rows in set (0.00 sec)

到此基本演示了 mycat 的主從讀寫分離功能,配置的前提是已經(jīng)有一個(gè)配置好的 mysql 主從復(fù)制架構(gòu),mycat 工作于 mysql 主從架構(gòu)的前端,負(fù)責(zé) SQL 語句的分發(fā)。

mycat 另一個(gè)主要功能是數(shù)據(jù)分片


4、ansible常用模塊介紹

Ansible常用模塊

1、ping模塊

2、raw模塊

3、yum模塊

4、apt模塊

5、pip模塊

6、synchronize模塊

7、template模塊

8、copy模塊

9、user 模塊與group模塊

10、service 模塊

11、get_url 模塊

12、fetch模塊

13、file模塊

14、unarchive模塊

15、command 模塊和shell


1、ping模塊

檢查指定節(jié)點(diǎn)機(jī)器是否還能連通,用法很簡單,不涉及參數(shù),主機(jī)如果在線,則回復(fù)pong

ansible 10.1.1.113 -m ping

[root@localhost ~]# ansible erp -m ping

192.168.10.6 | SUCCESS => {

? ? "changed": false,

? ? "ping": "pong"

}

192.168.10.7 | SUCCESS => {

? ? "changed": false,

? ? "ping": "pong"

}


2、raw模塊

執(zhí)行原始的命令,而不是通過模塊子系統(tǒng)。在任何情況下,使用shell或命令模塊是合適的。給定原始的參數(shù)直接通過配置的遠(yuǎn)程shell運(yùn)行??煞祷貥?biāo)準(zhǔn)輸出、錯誤輸出和返回代碼。此模塊沒有變更處理程序支持。

這個(gè)模塊不需要遠(yuǎn)程系統(tǒng)上的Python,就像腳本模塊一樣。此模塊也支持Windows目標(biāo)。

- name: Bootstrap a legacy python 2.4 host

? raw: yum -y install python-simplejson

- name: Bootstrap a host without python2 installed

? raw: dnf install -y python2 python2-dnf libselinux-python

- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)

? raw: cat < /tmp/*txt

? args:

? ? executable: /bin/bash

- name: safely use templated variables. Always use quote filter to avoid injection issues.

? raw: "{{package_mgr|quote}} {{pkg_flags|quote}} install {{python_simplejson|quote}}"


3、yum模塊

這個(gè)模塊是RedHat / CentOS作為遠(yuǎn)端節(jié)點(diǎn)的OS的時(shí)候,用的最多的。Yum是啥就不多說了,RedHat / CentOS包管理工具

使用`yum’軟件包管理器管理軟件包,其選項(xiàng)有:

– config_file:yum的配置文件 (optional)

– disable_gpg_check:關(guān)閉gpg_check (optional)

– disablerepo:不啟用某個(gè)源 (optional)

– enablerepo:啟用某個(gè)源(optional)

– name:要進(jìn)行操作的軟件包的名字,默認(rèn)最新的程序包,指明要安裝的程序包,可以帶上版本號,也可以傳遞一個(gè)url或者一個(gè)本地的rpm包的路徑

– state:狀態(tài)(present,absent,latest),表示是安裝還卸載

?? present:默認(rèn)的,表示為安裝

?? lastest: 安裝為最新的版本

?? absent:表示刪除

[root@localhost ~]# ansible test -m yum -a 'name=httpd state=latest'

[root@localhost ~]# ansible test -m yum -a 'name="@Development tools" state=present'

[root@localhost ~]# ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'


4、apt模塊

這個(gè)模塊是ubuntu作為遠(yuǎn)端節(jié)點(diǎn)的OS的時(shí)候,用的最多的。Apt是啥就不多說了,Ubuntu/Debian的包管理工具。

– deb: 用于安裝遠(yuǎn)程機(jī)器上的.deb后綴的軟件包(optional)

– install_recommends:這個(gè)參數(shù)可以控制遠(yuǎn)程電腦上是否只是下載軟件包,還是下載后安裝,默認(rèn)參數(shù)為true,設(shè)置為false的時(shí)候只下載軟件包,不安裝

– update_cache: 當(dāng)這個(gè)參數(shù)為yes的時(shí)候等于apt-get update(optional)

– name: apt要下載的軟件包名字,支持name=git=1.6 這種制定版本的模式

– state:狀態(tài)(present,absent,latest),表示是安裝還卸載

?? present:默認(rèn)的,表示為安裝

?? lastest: 安裝為最新的版本

?? absent:表示刪除

# 在安裝foo軟件包前更新然后安裝foo

- apt: name=foo update_cache=yes

# 移除foo軟件包

- apt: name=foo state=absent

# 安裝foo軟件包

- apt: name=foo state=present

# 安裝foo 1.0軟件包

- apt: name=foo=1.00 state=present

# 安裝nginx最新的名字為squeeze-backport發(fā)布包,并且安裝前執(zhí)行更新

- apt: name=nginx state=latest default_release=squeeze-backports update_cache=yes

# 只下載openjdk-6-jdk最新的軟件包,不安裝

- apt: name=openjdk-6-jdk state=latest install_recommends=no

# 安裝所有軟件包到最新版本

- apt: upgrade=dist

# 更新apt-get的list

- apt: update_cache=yes

# 3600秒后停止update_cache

- apt: update_cache=yes cache_valid_time=3600

# 安裝遠(yuǎn)程節(jié)點(diǎn)上的/tmp/mypackage.deb軟件包

- apt: deb=/tmp/mypackage.deb


5、pip模塊

用于管理Python庫依賴項(xiàng),為了使用pip模塊,必須提供參數(shù)name或者requirements

– chdir: 執(zhí)行pip命令前cd進(jìn)入的目錄

– name:要安裝的Python庫的名稱或遠(yuǎn)程包的URL。

– requirements:一個(gè)pip requirements.txt文件的路徑,它應(yīng)該是遠(yuǎn)程系統(tǒng)的本地文件,如果使用chdir選項(xiàng),則可以將文件指定為相對路徑。

– version:指定的Python庫的安裝版本。

– extra_args:額外的參數(shù)傳遞給pip。

– executable:顯式可執(zhí)行文件或可執(zhí)行文件的路徑名,用于為系統(tǒng)中安裝的特定版本的Python運(yùn)行pip。 例如pip-3.3,如果系統(tǒng)中安裝了Python 2.7和3.3,并且想要為Python 3.3安裝運(yùn)行pip。 它不能與“virtualenv”參數(shù)一起指定(在2.1中添加)。 默認(rèn)情況下,它將采用適用于python解釋器的版本。 pip3在python 3上,pip2或pip在python 2上。

– virtualenv:要安裝到的virtualenv目錄的可選路徑。 它不能與’executable’參數(shù)一起指定(在2.1中添加)。 如果virtualenv不存在,則將在安裝軟件包之前創(chuàng)建它。 可選的virtualenv_site_packages,virtualenv_command和virtualenv_python選項(xiàng)會影響virtualenv的創(chuàng)建。

– virtualenv_command:用于創(chuàng)建虛擬環(huán)境的命令或路徑名。 例如pyvenv,virtualenv,virtualenv2,~/bin /virtualenv,/usr/local/bin/virtualenv。

– virtualenv_python:用于創(chuàng)建虛擬環(huán)境的Python可執(zhí)行文件。 例如python3.5,python2.7。 未指定時(shí),將使用用于運(yùn)行ansible模塊的Python版本。 當(dāng)virtualenv_command使用pyvenv或-m venv模塊時(shí),不應(yīng)使用此參數(shù)。

– state:狀態(tài)(present,absent,latest, forcereinstall),表示是安裝還卸載

?? present:默認(rèn)的,表示為安裝

?? lastest: 安裝為最新的版本

?? absent:表示刪除

?? forcereinstall:“forcereinstall”選項(xiàng)僅適用于可ansible 2.1及更高版本。

# 安裝bottle python包。

- pip:

? ? name: bottle

# 在0.11版安裝bottle python包。

- pip:

? ? name: bottle

? ? version: 0.11

# 使用遠(yuǎn)程協(xié)議(bzr +,hg +,git +,svn +)安裝MyApp。 您不必在extra_args中提供'-e'選項(xiàng)。

- pip:

? ? name: svn+http://myrepo/svn/MyApp#egg=MyApp

# 使用遠(yuǎn)程協(xié)議(bzr +,hg +,git +)安裝MyApp。

- pip:

? ? name: git+http://myrepo/app/MyApp


# 從本地壓縮包安裝MyApp

- pip:

? ? name: file:///path/to/MyApp.tar.gz


# 將bottle安裝到指定的virtualenv中,繼承全局安裝的模塊

- pip:

? ? name: bottle

? ? virtualenv: /my_app/venv

? ? virtualenv_site_packages: yes


# 使用Python 2.7將bottle安裝到指定的virtualenv中

- pip:

? ? name: bottle

? ? virtualenv: /my_app/venv

? ? virtualenv_command: virtualenv-2.7

# 在用戶主目錄中安裝bottle。

- pip:

? ? name: bottle

? ? extra_args: --user

# 安裝指定的python requirements

- pip:

? ? requirements: /my_app/requirements.txt

# 在指定的virtualenv中安裝指定的python requirements。

- pip:

? ? requirements: /my_app/requirements.txt

? ? virtualenv: /my_app/venv

# 安裝指定的python requirements和自定義pip源URL

- pip:

? ? requirements: /my_app/requirements.txt

? ? extra_args: -i https://example.com/pypi/simple

# 專門為Python 3.3安裝bottle,使用'pip-3.3'可執(zhí)行文件。

- pip:

? ? name: bottle

? ? executable: pip-3.3

# 安裝 bottle,如果已安裝,強(qiáng)制重新安裝

- pip:

? ? name: bottle

? ? state: forcereinstall


6、synchronize模塊

– 使用rsync同步文件,將主控方目錄推送到指定節(jié)點(diǎn)的目錄下,其參數(shù)如下:

– delete: 刪除不存在的文件,delete=yes 使兩邊的內(nèi)容一樣(即以推送方為主),默認(rèn)no

– src: 要同步到目的地的源主機(jī)上的路徑; 路徑可以是絕對的或相對的。如果路徑使用"/“來結(jié)尾,則只復(fù)制目錄里的內(nèi)容,如果沒有使用”/"來結(jié)尾,則包含目錄在內(nèi)的整個(gè)內(nèi)容全部復(fù)制

– dest:目的地主機(jī)上將與源同步的路徑; 路徑可以是絕對的或相對的。

– dest_port:默認(rèn)目錄主機(jī)上的端口 ,默認(rèn)是22,走的ssh協(xié)議。

– mode: push或pull,默認(rèn)push,一般用于從本機(jī)向遠(yuǎn)程主機(jī)上傳文件,pull 模式用于從遠(yuǎn)程主機(jī)上取文件。

– rsync_opts:通過傳遞數(shù)組來指定其他rsync選項(xiàng)。

# 將控制機(jī)器上的src同步到遠(yuǎn)程主機(jī)上

- synchronize:

? ? src: some/relative/path

? ? dest: /some/absolute/path

# 同步傳遞額外的rsync選項(xiàng)

- synchronize:

? ? src: /tmp/helloworld

? ? dest: /var/www/helloworld

? ? rsync_opts:

? ? ? - "--no-motd"

? ? ? - "--exclude=.git"


7、template模塊

基于模板方式生成一個(gè)文件復(fù)制到遠(yuǎn)程主機(jī)(template使用Jinjia2格式作為文件模版,進(jìn)行文檔內(nèi)變量的替換的模塊。它的每次使用都會被ansible標(biāo)記為”changed”狀態(tài)。)

– backup: 如果原目標(biāo)文件存在,則先備份目標(biāo)文件

– src:在ansible控制器上的Jinja2格式化模板的路徑。 這可以是相對或絕對的路徑。

– dest:將模板渲染到遠(yuǎn)程機(jī)器上的位置。

force:是否強(qiáng)制覆蓋,默認(rèn)為yes

– owner:目標(biāo)文件屬主

– group:目標(biāo)文件屬組

– mode:目標(biāo)文件的權(quán)限模式,模式可以被指定為符號模式(例如,u + rwx或u = rw,g = r,o = r)。

# Example from Ansible Playbooks

- template:

? ? src: /mytemplates/foo.j2

? ? dest: /etc/file.conf

? ? owner: bin

? ? group: wheel

? ? mode: 0644

# 同樣的例子,但使用等效于0644的符號模式

- template:

? ? src: /mytemplates/foo.j2

? ? dest: /etc/file.conf

? ? owner: bin

? ? group: wheel

? ? mode: "u=rw,g=r,o=r"


8、copy模塊

在遠(yuǎn)程主機(jī)執(zhí)行復(fù)制操作文件。

– src:要復(fù)制到遠(yuǎn)程主機(jī)的文件在本地的地址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個(gè)目錄,它將遞歸復(fù)制。在這種情況下,如果路徑使用"/“來結(jié)尾,則只復(fù)制目錄里的內(nèi)容,如果沒有使用”/“來結(jié)尾,則包含目錄在內(nèi)的整個(gè)內(nèi)容全部復(fù)制,類似于rsync。

– content:用于替代"src”,可以直接設(shè)定指定文件的值

– dest:必選項(xiàng)。要將源文件復(fù)制到的遠(yuǎn)程主機(jī)的絕對路徑,如果源文件是一個(gè)目錄,那么該路徑也必須是個(gè)目錄

– directory_mode:遞歸的設(shè)定目錄的權(quán)限,默認(rèn)為系統(tǒng)默認(rèn)權(quán)限

– force:如果目標(biāo)主機(jī)包含該文件,但內(nèi)容不同,如果設(shè)置為yes,則強(qiáng)制覆蓋,如果為no,則只有當(dāng)目標(biāo)主機(jī)的目標(biāo)位置不存在該文件時(shí),才復(fù)制。默認(rèn)為yes

– others:所有的file模塊里的選項(xiàng)都可以在這里使用

# Example from Ansible Playbooks

- copy:

? ? src: /srv/myfiles/foo.conf

? ? dest: /etc/foo.conf

? ? owner: foo

? ? group: foo

? ? mode: 0644

# 與上述同樣的例子,但是使用等價(jià)于0644的符號模式

- copy:

? ? src: /srv/myfiles/foo.conf

? ? dest: /etc/foo.conf

? ? owner: foo

? ? group: foo

? ? mode: u=rw,g=r,o=r

# 另一個(gè)符號模式示例,添加一些權(quán)限并刪除其他

- copy:

? ? src: /srv/myfiles/foo.conf

? ? dest: /etc/foo.conf

? ? owner: foo

? ? group: foo

? ? mode: u+rw,g-wx,o-rwx


9、user 模塊與group模塊

user模塊是請求的是useradd, userdel, usermod三個(gè)指令,goup模塊請求的是groupadd, groupdel, groupmod 三個(gè)指令。

1、user模塊

– home:指定用戶的家目錄,需要與createhome配合使用。

– groups:指定用戶的屬組。

– uid:指定用的uid。

– password:指定用戶的密碼。

注意:指定password參數(shù)時(shí),不能使用明文密碼,因?yàn)楹竺孢@一串密碼會被直接傳送到被管理主機(jī)的/etc/shadow文件中,所以需要先將密碼字符串進(jìn)行加密處理。然后將得到的字符串放到password中即可。

echo “123456” | openssl passwd -1 -salt $(< /dev/urandom tr -dc ‘[:alnum:]’ | head -c 32) -stdin

$14 P 4 P l F u E 4P4PlFuE4P4PlFuEur9ObJiT5iHNrb9QnjaIB0

– name:指定用戶名。

– createhome:是否創(chuàng)建家目錄 yes|no。

– system:是否為系統(tǒng)用戶。

– remove:當(dāng)state=absent時(shí),remove=yes則表示連同家目錄一起刪除,等價(jià)于userdel -r。

– state:是創(chuàng)建還是刪除。(present,absent)

– shell:指定用戶的shell環(huán)境。

– generate_ssh_key:是否為相關(guān)用戶生成SSH密鑰。 這不會覆蓋現(xiàn)有的SSH密鑰。

– ssh_key_bits:可選擇指定要創(chuàng)建的SSH密鑰中的位數(shù)。

– ssh_key_passphrase:設(shè)置SSH密鑰的密碼。 如果沒有提供密碼,SSH密鑰將默認(rèn)沒有密碼。

– ssh_key_file:指定SSH密鑰文件名(可選)。 如果這是一個(gè)相對的文件名,那么它將是相對于用戶的主目錄。

– ssh_key_type:指定要生成的SSH密鑰的類型(可選)。 可用的SSH密鑰類型將取決于目標(biāo)主機(jī)上的實(shí)現(xiàn)。

# 使用bash shell添加用戶“james”,將組“管理員”和“開發(fā)人員”附加到用戶組

- user:

? ? name: james

? ? shell: /bin/bash

? ? groups: admins,developers

? ? append: yes

# 刪除用戶'johns'

- user:

? ? name: johnd

? ? state: absent

? ? remove: yes

# 在~/.ssh/id_rsa中為用戶jsmith創(chuàng)建一個(gè)2048位的SSH密鑰

- user:

? ? name: jsmith

? ? generate_ssh_key: yes

? ? ssh_key_bits: 2048

? ? ssh_key_file: .ssh/id_rsa


2、group模塊

– gid:指定用的gid。

– name:指定用戶名。

– state:是創(chuàng)建還是刪除。(present,absent)

– system:如果是,則表示創(chuàng)建的組是系統(tǒng)組。

# Example group command from Ansible Playbooks

- group:

? ? name: somegroup

? ? state: present


10、service 模塊

用于管理服務(wù)。

– arguments:給命令行提供一些選項(xiàng)

– enabled:是否開機(jī)啟動 yes|no, 要求狀態(tài)(state)和啟用(enabled)中至少有一個(gè)。

– name:必選項(xiàng),服務(wù)名稱

– runlevel:運(yùn)行級別

– sleep:如果執(zhí)行了restarted,在則stop和start之間沉睡幾秒鐘

– state:對當(dāng)前服務(wù)執(zhí)行啟動,停止、重啟、重新加載等操作(started,stopped,restarted,reloaded)

# 啟動服務(wù)httpd,如果不運(yùn)行

- service:

? ? name: httpd

? ? state: started

# 停止服務(wù)httpd,如果運(yùn)行

- service:

? ? name: httpd

? ? state: stopped


# 啟用服務(wù)httpd的示例操作,而不使用運(yùn)行狀態(tài)

- service:

? ? name: httpd

? ? enabled: yes


11、get_url 模塊

該模塊主要用于從http、ftp、https服務(wù)器上下載文件(類似于wget),主要有如下選項(xiàng):

– sha256sum:下載完成后進(jìn)行sha256 check;

– timeout:下載超時(shí)時(shí)間,默認(rèn)10s

– url:下載的URL

– url_password、url_username:主要用于需要用戶名密碼進(jìn)行驗(yàn)證的情況

– dest:將文件下載到哪里的絕對路徑。如果dest是目錄,則使用服務(wù)器提供的文件名,或者如果沒有提供,將使用遠(yuǎn)程服務(wù)器上的URL的基本名稱。

– headers:以格式“key:value,key:value”為請求添加自定義HTTP標(biāo)頭。

- name: Download foo.conf

? get_url:

? ? url: http://example.com/path/file.conf

? ? dest: /etc/foo.conf

? ? mode: 0440

- name: Download file with custom HTTP headers

? get_url:

? ? url: http://example.com/path/file.conf

? ? dest: /etc/foo.conf

? ? headers: 'key:value,key:value'

- name: Download file with check (sha256)

? get_url:

? ? url: http://example.com/path/file.conf

? ? dest: /etc/foo.conf

? ? checksum: sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c


12、fetch模塊

它用于從遠(yuǎn)程機(jī)器獲取文件,并將其本地存儲在由主機(jī)名組織的文件樹中。

– src:遠(yuǎn)程系統(tǒng)上要獲取的文件。 這必須是一個(gè)文件,而不是一個(gè)目錄。 后續(xù)版本可能會支持遞歸提取。

– dest:保存文件的目錄。 例如,如果dest目錄是/backup,在主機(jī)host.example.com上命名為/ etc/profile的src文件將被保存到/backup/host.example.com/etc/profile。

– flat:允許您覆蓋將目標(biāo)文件添加到主機(jī)名/ path / to / file的默認(rèn)行為。

# 將文件存儲到/tmp/fetched/host.example.com/tmp/somefile中

- fetch:

? ? src: /tmp/somefile

? ? dest: /tmp/fetched

# 直接指定路徑

- fetch:

? ? src: /tmp/somefile

? ? dest: /tmp/prefix-{{ inventory_hostname }}

? ? flat: yes

# 指定目標(biāo)路徑

- fetch:

? ? src: /tmp/uniquefile

? ? dest: /tmp/special/

? ? flat: yes


13、file模塊

file模塊主要用于遠(yuǎn)程主機(jī)上的文件操作,file模塊包含如下選項(xiàng):

– force:需要在兩種情況下強(qiáng)制創(chuàng)建軟鏈接,一種是源文件不存在但之后會建立的情況下;另一種是目標(biāo)軟鏈接已存在,需要先取消之前的軟鏈,然后創(chuàng)建新的軟鏈,有兩個(gè)選項(xiàng):yes|no

– group:定義文件/目錄的屬組

– mode:定義文件/目錄的權(quán)限

– owner:定義文件/目錄的屬主

– path:必選項(xiàng),定義文件/目錄的路徑

– recurse:遞歸的設(shè)置文件的屬性,只對目錄有效

– src:要被鏈接的源文件的路徑,只應(yīng)用于state=link的情況

– dest:被鏈接到的路徑,只應(yīng)用于state=link的情況

– state:

?? directory:如果目錄不存在,創(chuàng)建目錄

?? file:即使文件不存在,也不會被創(chuàng)建

?? link:創(chuàng)建軟鏈接

?? hard:創(chuàng)建硬鏈接

?? touch:如果文件不存在,則會創(chuàng)建一個(gè)新的文件,如果文件或目錄已存在,則更新其最后修改時(shí)間

?? absent:刪除目錄、文件或者取消鏈接文件

# 更改文件所有權(quán),組和模式。 當(dāng)使用八進(jìn)制數(shù)指定模式時(shí),第一個(gè)數(shù)字應(yīng)始終為0。

- file:

? ? path: /etc/foo.conf

? ? owner: foo

? ? group: foo

? ? mode: 0644


# touch創(chuàng)建文件,使用符號模式設(shè)置權(quán)限(相當(dāng)于0644)

- file:

? ? path: /etc/foo.conf

? ? state: touch

? ? mode: "u=rw,g=r,o=r"

# touch創(chuàng)建文件,添加/刪除一些權(quán)限

- file:

? ? path: /etc/foo.conf

? ? state: touch

? ? mode: "u+rw,g-wx,o-rwx"

# 創(chuàng)建一個(gè)目錄,如果它不存在

- file:

? ? path: /etc/some_directory

? ? state: directory

? ? mode: 0755


14、unarchive模塊

用于解壓文件,模塊包含如下選項(xiàng):

– copy:在解壓文件之前,是否先將文件復(fù)制到遠(yuǎn)程主機(jī),默認(rèn)為yes。若為no,則要求目標(biāo)主機(jī)上壓縮包必須存在。

– creates:指定一個(gè)文件名,當(dāng)該文件存在時(shí),則解壓指令不執(zhí)行

– dest:遠(yuǎn)程主機(jī)上的一個(gè)路徑,即文件解壓的絕對路徑。

– group:解壓后的目錄或文件的屬組

– list_files:如果為yes,則會列出壓縮包里的文件,默認(rèn)為no,2.0版本新增的選項(xiàng)

– mode:解壓后文件的權(quán)限

– src:如果copy為yes,則需要指定壓縮文件的源路徑

– owner:解壓后文件或目錄的屬主

- name: 將foo.tgz解壓縮到/var/lib/foo中

? unarchive:

? ? src: foo.tgz

? ? dest: /var/lib/foo

- name: 解壓遠(yuǎn)程計(jì)算機(jī)上已存在的文件

? unarchive:

? ? src: /tmp/foo.zip

? ? dest: /usr/local/bin

? ? remote_src: yes

- name: 解壓文檔需要下載的文件(2.0中添加)

? unarchive:

? ? src: https://example.com/example.zip

? ? dest: /usr/local/bin

? ? remote_src: yes


15、command 模塊和shell

用于在各被管理節(jié)點(diǎn)運(yùn)行指定的命令

shell和command的區(qū)別:shell模塊可以特殊字符,而command是不支持

1、command模塊

– chdir:在運(yùn)行命令之前,切換到此目錄。

- name: return motd to registered var

? command: cat /etc/motd

? register: mymotd

- name: Run the command if the specified file does not exist.

? command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

# 您還可以使用“args”表單提供選項(xiàng)。

- name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.

? command: /usr/bin/make_database.sh arg1 arg2

? args:

? ? chdir: somedir/

? ? creates: /path/to/database


2、shell模塊

– chdir:在運(yùn)行命令之前,切換到此目錄。

– executable:更改用于執(zhí)行命令的shell(bash,sh)。 應(yīng)該是可執(zhí)行文件的絕對路徑。

- name: Execute the command in remote shell; stdout goes to the specified file on the remote.

? shell: somescript.sh >> somelog.txt

- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)

? shell: cat < /tmp/*txt

? args:

? ? executable: /bin/bash

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、主從復(fù)制及主主復(fù)制的實(shí)現(xiàn)1、主從復(fù)制主節(jié)點(diǎn):[root@centOS8 ~]# yum -y install ...
    小霍吖閱讀 652評論 0 0
  • 1、主從復(fù)制及主主復(fù)制的實(shí)現(xiàn) 主從復(fù)制 完成主設(shè)備配置 完成從設(shè)備配置 主主復(fù)制:在主從復(fù)制的基礎(chǔ)上 首先,調(diào)整主...
    yabao11閱讀 497評論 0 0
  • 1、ansible-playbook實(shí)現(xiàn)MySQL的二進(jìn)制部署 1.1 安裝ansible # yum -y in...
    布格雷斯閱讀 361評論 1 0
  • 1、 導(dǎo)入hellodb.sql生成數(shù)據(jù)庫 (1) 在students表中,查詢年齡大于25歲,且為男性的同學(xué)的名...
    布格雷斯閱讀 332評論 1 0
  • 1、在阿里云服務(wù)器搭建openv-p-n(有條件的同學(xué)再做) 2、通過編譯、二進(jìn)制安裝MySQL5.7 編譯安裝 ...
    布格雷斯閱讀 363評論 1 0

友情鏈接更多精彩內(nèi)容