MySQL变量的查看和设置

类似于Oracle的参数文件,MySQL的选项文件(如my.cnf)用于配置MySQL服务器,
MySQL的变量分为以下两种:

1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看
2)状态变量:监控MySQL服务器的运行状态,可以用show status查看

系统变量
系统变量按其作用域的不同可以分为以下两种:

1)分为全局(GLOBAL)级:对整个MySQL服务器有效
2)会话(SESSION或LOCAL)级:只影响当前会话

有些变量同时拥有以上两个级别,MySQL将在建立连接时用全局级变量初始化会话级变量,但一旦连接建立之后,全局级变量的改变不会影响到会话级变量。





---阅读剩余部分---

使用netstat统计查看访问连接信息

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
状态列表:

LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态

常用使用方法:

并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

显示当前所有活动的网络连接:
netstat -na

列出所有端口 (包括监听和未监听的)
netstat -a

只显示监听端口 netstat -l
netstat -l

只列出所有监听 tcp 端口 netstat -lt
netstat -lt

只列出所有监听 udp 端口 netstat -lu
netstat -lu

只列出所有监听 UNIX 端口 netstat -lx
netstat -lx

显示所有端口的统计信息 netstat -s
netstat -s

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
netstat -st 
netstat -su

在 netstat 输出中显示 PID 和进程名称 netstat -p
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
netstat -pt

显示系统不支持的地址族 (Address Families)
netstat --verbose

显示核心路由信息 netstat -r
netstat -r

显示网络接口列表
netstat -i

显示出所有处于监听状态的应用程序及进程号和端口号:
netstat -aultnp

如果想对一个单一的进行查询,只需要在命令后面再加上“| grep $”。这里就用到了管道符,以及grep筛选命令,$代表参数,也就是你要查询的那个。
如要显示所有80端口的网络连接:
netstat -aultnp | grep 80

如果还想对返回的连接列表进行排序,这就要用到sort命令了,命令如下:
netstat -aultnp | grep :80 | sort

当然,如果还想进行统计的话,就可以再往后面加wc命令。如:
netstat -aultnp | grep :80 | wc -l

其实,要想监测出系统连接是否安全,要进行多状态的查询,以及要分析,总结,还有就是经验。总的下来,才可以判断出连接是否处于安全状态。
netstat -n -p|grep SYN_REC | wc -l

这个命令可以查找出当前服务器有多少个活动的 SYNC_REC 连接。正常来说这个值很小,最好小于5。 当有Dos攻击或者邮件炸弹的时候,这个值相当的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。
netstat -n -p | grep SYN_REC | sort -u

先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c

列出所有连接过的IP地址。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

列出所有发送SYN_REC连接节点的IP地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

使用netstat命令计算每个主机连接到本机的连接数。
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出所有连接到本机的UDP或者TCP连接的IP数量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

检查 ESTABLISHED 连接并且列出每个IP地址的连接数量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

centos最小化安装 无 ifconfig,netstat,dig的安装

centos7最小化安装之后,默认是没有 ifconfig,netstat,dig命令的:
yum安装ifconfig,netstat

yum install net-tools -y

yum安装dig

yum install bind-utils -y

dig命令的参数

参数选项

-b    设置查询时所使用的源IP地址.这个必须是一个本地主机网络接口上的地址.

-c    Internet上的DNS服务器,大部分是拒绝使用-c进行查询的.这个值可以是CH,HS等.

-f    使用批处理模式从文件中读取一个需要查询的列表.

-p    指定一个DNS服务器的端口,不使用-p选项,则使用默认端口53.

-t    设置查询类型.默认为A类型查询.

-x    反向查询.使用这个选项时,不需要提供name,class,type参数.dig会自动设置这些参数.

查询选项:
    dig提供了一些开关式的查询选项,用于设置查询方法和查询结果的输出.


       +[no]tcp
        查询时,是否使用TCP协议.默认情况下是使用UDP协议.

       +[no]ignore
        是否忽略设置有"截头"位的UDP回应包.若设置为不忽略,将使用TCP协议进行重试.

       +domain=somename
        设置一个包含域名的搜索列表,就像在/etc/resolv.conf文件中指定的一样.

       +[no]search
        是否使用搜索列表.默认不使用搜索列表.

       +[no]adflag
        是否在查询中设置AD(可信数据)位.

       +[no]cdflag
        是否在查询中设置CD(禁止检查)位.这个需要服务器不进行回应的DNSSEC确认.

       +[no]recurse
        在查询中设置RD(递归)位.默认情况下是设置有这个标志.表示dig正常情况下会进行
一个递归查询.当使用+nssearch或+trace时,这个选项将自动被禁用.

       +[no]nssearch
        设置这个选项后,dig将在权威DNS服务器中查找结果.然后显示每个DNS服务器的SOA记录.

       +[no]trace
        设置轨迹查询.即从根服务器开始追踪一个域名的解析过程.此选项默认是禁用的.打开
此选项后,dig将反复对name进行查询.它将从根服务器开始,显示每一个服务器回答.

       +[no]cmd
        设置是否打印初始化注释.默认是打开的.

       +[no]short
        设置是否简化输出.默认是详细的输出.

       +[no]identify
        在启用short选项后,是否显示IP地址和端口号.在short选项启用后,默认是不显示
IP地址和端口号的.

       +[no]comments
        是否输出注释行.默认是输出注释行.

       +[no]stats
        是否输出统计列表.默认是输出统计列表.

       +[no]qr
        是否输出发送出的查询内容.默认是不打印.

       +[no]question
        在输出中是否打印"提问部分".默认是打印"提问部分".

       +[no]answer
        在输出中是否打印"回答部分".默认是打印"回答部分".

       +[no]authority
        在输出中是否打印"权威部分".默认是打印"权威部分".

       +[no]additional
        在输出中是否打印"附加部分".默认是打印"附加部分".

       +[no]all
        设置或取消所有标记设置.

       +time=T
        设置查询的超时时间.默认超时是5秒.

       +tries=T
        设置UDP查询的重试次数.默认是3.

       +[no]multiline
        设置是否多行输出.默认每个记录一行.

       +[no]fail
        是否在接收到一个错误后,尝试下一个服务器.

       +[no]besteffort
        是否显示信息的摘要.默认是不显示.

sublime2/3 安装package control

sublimetext官网地址https://www.sublimetext.com,下载安装后启动,默认没有安装Package Control即包管理器,安装步骤如下:
直接按Ctrl+` 键,在控制台输入:如下代码,回车,会自动安装Package Control
sublimetext2:

import urllib2,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')

sublimetext3:

import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

如果安装失败,可以用下面这个方法:
下载这个文件

https://packagecontrol.io/Package%20Control.sublime-package

将下载回来的文件重命名为 Installed Packages
复制文件到Sublime的插件目录
一般目录地址为

C:\Users\username\AppData\Roaming\Sublime Text 3\Packages

最后重启Sublime即可;

MySQL: Incorrect key file for table '/tmp/#sql_37b_1.MYI'; try to repair it 解决方法

Incorrect key file for table '/tmp/#sql_37b_1.MYI'; try to repair it

执行存储过程的时候报这个错误,df看了下空间/tmp分区只有2G空间,

[root@mallerppredb01 ~]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/systemvg-rootlv   10G  198M  9.8G   2% /
devtmpfs                      16G     0   16G   0% /dev
tmpfs                         16G   12K   16G   1% /dev/shm
tmpfs                         16G   57M   16G   1% /run
tmpfs                         16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/systemvg-usrlv    10G  2.6G  7.5G  26% /usr
/dev/vda1                    497M  131M  367M  27% /boot
/dev/mapper/systemvg-optlv    33G  4.3G   29G  14% /opt
/dev/mapper/systemvg-varlv   8.0G  569M  7.5G   7% /var
/dev/mapper/systemvg-homelv   20G   48M   20G   1% /home
/dev/mapper/systemvg-tmplv   2.0G   45M  2.0G   3% /tmp
/dev/mapper/systemvg-datalv  580G   11G  570G   2% /data
tmpfs                        3.2G     0  3.2G   0% /run/user/0

查看mysql的tmpdir参数:

mysql> show variables like 'tmpdir';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir        | /tmp  |
+---------------+-------+
1 row in set (0.00 sec)

tmpdir参数不支持热设置,只能增加/tmp目录空间或通过配置文件进行修改

在my.cnf里面的[mysqld]部分增加
tmpdir=/data/mysqltmp
然后重启mysql服务,/data/mysqltmp这个目录,mysql用户、组要有读写权限。
tmpdir参数文档:https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_tmpdir

CentOS 7.x cron定时任务服务重启

cron服务是Linux内置服务,默认不会开机自动启动。可用以下命令启动和停止服务,也可以设置成开机启动:
启动cron服务

systemctl start crond

停止cron服务

systemctl stop crond

重启cron服务

systemctl restart crond

设置cron开机启动

systemctl enable crond.service

查看当前crontab,输入

crontab -l

编辑当前crontab

crontab -e

删除当前crontab

crontab  -r

impdp导入报错ORA-39001: invalid argument value

oracle导入dmp文件报错:

impdp 'username/password' directory=DIR_DUMP_T1 table_exists_action=replace dumpfile=b30.dmp
Import: Release 11.2.0.1.0 - Production on Wed Jan 10 16:20:14 2018

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-39088: file name cannot contain a path specification

低版本的导入数据库在读高版本数据库由expdp产生的文件的时候很可能会产生上述错误,
比如对于上述问题而言,只需要在源数据库执行expdp的时候加上version=10.2.0.2,
然后在目标数据库执行impdp的时候也加上version=10.2.0.2的就OK了。
解决方法就是本着一个"就低不就高"的原则,
源数据库的版本是 11g 11.2.0.4.0,导入的目标库是11.2.0.1.0,版本有点差异,带上版本号Version=11.2.0.1.0重新导出:

[oracle@pldb2 expdir_tmp]$ expdp 'username/password'@PD1 DIRECTORY=DIR_DUMP_01 DUMPFILE=b30.dmp tables=BIS_TRAFFIC_INTSUMMARY_HOUR Version=11.2.0.1.0                                      
Export: Release 11.2.0.4.0 - Production on Wed Jan 10 16:18:24 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "POWERDESK"."SYS_EXPORT_TABLE_01":  powerdesk/********@PD1 DIRECTORY=DIR_DUMP_01 DUMPFILE=b30.dmp tables=BIS_TRAFFIC_INTSUMMARY_HOUR Version=11.2.0.1.0 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 80 MB
>>> DBMS_AW_EXP: BIN$TAsGFYCiGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCkGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCmGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCoGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCqGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCsGqfgUwwD+woJNg==$0 not AW$
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
>>> DBMS_AW_EXP: BIN$TAsGFYCiGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCkGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCmGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCoGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCqGqfgUwwD+woJNg==$0 not AW$
>>> DBMS_AW_EXP: BIN$TAsGFYCsGqfgUwwD+woJNg==$0 not AW$
. . exported "POWERDESK"."BIS_TRAFFIC_INTSUMMARY_HOUR"   63.76 MB  715644 rows
Master table "POWERDESK"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for POWERDESK.SYS_EXPORT_TABLE_01 is:
  /oracle/expdir_tmp/b30.dmp
Job "POWERDESK"."SYS_EXPORT_TABLE_01" successfully completed at Wed Jan 10 16:18:28 2018 elapsed 0 00:00:03

重新导入ok

impdp 'username/password' directory=DIR_DUMP_T1 table_exists_action=replace dumpfile=b30.dmp Version=11.2.0.1.0 ;

Oracle创建、查看、修改、赋权、删除directory目录

创建directory一般是为了用数据泵导入/导出数据用,
创建directory语法:

CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';

例如:

create or replace directory dumpdir as '/home/oracle/datatmp'
这样把目录/home/oracle/datatmp设置成dumpdir代表的directory

查看directory路径

select * from dba_directories;

修改directory

create or replace directory dumpdir as '/home/dumpfiles';

要更改dumpdir目录的路径为/home/dumpfiles

directory赋权

grant read,write on directory dumpdir to username;

directory删除

drop directory DIRENAME;

Kafka集群端口无法监听及访问故障解决

出现问题的kafka版本是0.9.0.1,端口9099老是监听不起来,解决办法:
修改/usr/local/app/msg_server/kafka/0.9.0.1/config/server.properties文件的

listeners=PLAINTEXT://0.0.0.0:9099

这里的listeners也可以修换成内网IP地址,三台记得都修改,或者注释掉listeners增加advertised.listeners参数,
然后重启kafka即可

/usr/local/app/msg_server/kafka/0.9.0.1/bin/kafka-server-start.sh -daemon /usr/local/app/msg_server/kafka/0.9.0.1/config/server.properties 

advertised.listeners这个配置的含义,官网有解释:
Listeners to publish to ZooKeeper for clients to use, if different than the listeners above. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, the value for listeners will be used.
详情:http://kafka.apache.org/documentation/#configuration
kafka就会忽略listeners配置,用一个就可以了;

附server.properties配置文件内容:

# --------------------------------------------- need update
broker.id=0
listeners=PLAINTEXT://0.0.0.0:9099
#advertised.listeners=PLAINTEXT://10.249:9099
port=9099
default.replication.factor=3
# --------------------------------------------- need update
host.name=k1
# --------------------------------------------- need update
advertised.host.name=k1
advertised.port=9099
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/usr/local/app/msg_server/kafka/0.9.0.1/data/
num.partitions=10
num.recovery.threads.per.data.dir=1
log.retention.hours=1
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=true
#zookeeper.connect=k1:2181
zookeeper.connect=k1:2181,k2:2181,k3:2181
zookeeper.connection.timeout.ms=6000
delete.topic.enable=true

MySQL数据库查看数据表占用空间大小和记录数

MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:

TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小

一个表占用空间的大小,相当于是 数据大小 + 索引大小,
示例:
1、查看enrolment_db库的所有表大小:

select table_name,table_rows from tables where TABLE_SCHEMA = 'enrolment_db' order by table_rows desc; 

2、查看enrolment_db库的所有表大小、索引长度:

SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='enrolment_db' order by TABLE_ROWS DESC;

3、统计enrolment_db表的所有记录条数:

SELECT sum(TABLE_ROWS) as heji FROM information_schema.TABLES WHERE TABLE_SCHEMA='enrolment_db';

注意:InnoDB引擎下table_rows行计数仅是大概估计值.

MongoDB分片启动失败解决方法

MongoDB机器未能正常关机,机器掉电重启等各种情况,都可能引起mongodb数据文件异常,然后下次启动的时候,会报错大概如下

517322 2018-01-03T22:20:45.939+0800 I NETWORK  [Balancer] scoped connection to 10.249.3.12:20000,10.249.3.11:20000,10.249.3.11:20003 not being returned to the pool
517323 2018-01-03T22:20:45.939+0800 I SHARDING [Balancer] caught exception while doing balance: ReplicaSetMonitor no master found for set: shard1
517324 2018-01-03T22:20:46.540+0800 I NETWORK  [LockPinger] SyncClusterConnection connecting to [10.249.3.12:20000]
517325 2018-01-03T22:20:46.541+0800 I NETWORK  [LockPinger] SyncClusterConnection connecting to [10.249.3.11:20000]
517326 2018-01-03T22:20:46.541+0800 I NETWORK  [LockPinger] SyncClusterConnection connecting to [10.249.3.11:20003]
517327 2018-01-03T22:20:49.748+0800 W SHARDING config servers 10.249.3.12:20000 and 10.249.3.11:20000 differ
517328 2018-01-03T22:20:49.749+0800 W SHARDING config servers 10.249.3.12:20000 and 10.249.3.11:20000 differ
517329 2018-01-03T22:20:49.751+0800 W SHARDING config servers 10.249.3.12:20000 and 10.249.3.11:20000 differ
517330 2018-01-03T22:20:49.752+0800 W SHARDING config servers 10.249.3.12:20000 and 10.249.3.11:20000 differ

重点在differ这里,两个分片不一致,导致不能启动,解决方法如下:
分别安全关闭10.249.3.11和12的MongoDB

/usr/local/mongodb/bin/mongo -host 127.0.0.1 -port 20000
> use admin; 
> db.shutdownServer();

进入到3.11机器的对应数据目录,将文件整个打包,
进入到3.12机器的数据目录/data/mongodb/config20001,删除所有文件,记得备份,
最后scp 11.zip 10.249.3.12:/data/mongodb/config20001 ,然后解压,最后启动mongodb即可;

Redis主从复制

redis主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致;且实现Redis的主从复制非常简单。
redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。

过程:
1:当一个从数据库启动时,会向主数据库发送sync命令,

2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来

3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。

4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。

注意:redis2.8之前的版本:当主从数据库同步的时候从数据库因为网络原因断开重连后会重新执行上述操作,不支持断点续传。
redis2.8之后支持断点续传,推荐安装最新版;

配置
Redis主从结构支持一主多从
主节点:172.17.11.35
从节点:172.17.11.36
注意:所有从节点的配置都一样

手动修改配置文件
只需要修改从节点中redis的配置文件中的slaveof属性启动redis节点即可

slaveof 172.17.11.35 6379

运行redis-cli 登录控制台info后可看到信息:

redis-cli 
127.0.0.1:6379> INFO
# Replication
role:slave
master_host:172.17.11.35
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:21490
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d5370a33ed6b49a24111ebac3e5d8f0a56a8a4aa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:21490
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:21490

当然也可以动态设置
通过redis-cli 连接到从节点服务器,执行下面命令即可。

slaveof 172.17.11.35 6379

演示结果和手动方式一致。
同理在Master上用redis-cli登录控制台,使用info查看

# Replication
role:master
connected_slaves:1
slave0:ip=172.17.11.36,port=6379,state=online,offset=21644,lag=0
master_replid:d5370a33ed6b49a24111ebac3e5d8f0a56a8a4aa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:21644
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:21644

注意事项
如果使用主从复制,那么要确保master激活了持久化,或者确保它不会在当掉后自动重启。
原因:
slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。
在配置redis复制功能的时候如果主数据库设置了密码,需要在从数据的配置文件中通过masterauth参数设置主数据库的密码,这样从数据库在连接主数据库时就会自动使用auth命令认证了。相当于做了一个免密码登录。

MySQL存储过程创建、查看、调用及参数、存储过程权限介绍

存储过程(Stored Procedure):
一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

优点(为什么要用存储过程?):
  将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
  批量处理:SQL+循环,减少流量,也就是“跑批”
  统一接口,确保数据的安全

相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。
一、存储过程的创建和调用
  >存储过程就是具有名字的一段代码,用来完成一个特定的功能。
  >创建的存储过程保存在数据库的数据字典中。
创建存储过程

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

存储过程权限相关:

CREATE ROUTINE : 创建存储过程的权限 
ALTER ROUTINE : 修改存储过程的权限 
EXECUTE :执行存储过程的权限
GRANT SELECT ON `mysql`.`proc` TO 'bis_enrolment_u'@'10.200.%' identified by 'xxxxx'; ; 普通账号没有查看存储过程或函数的权限,增加后可以看到系统有多少个函数或存储过程·









---阅读剩余部分---

yum安装iostat,mpstat,sar等系统性能查看命令

CentOSmini版安装以后,默认不安装iostat等命令,直接使用yum安装:

yum install sysstat -y

Debian或Ubuntu安装:

apt-get install sysstat -y

关于 Sysstat;

Sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有 利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手;

Sysstat 软件包集成如下工具:

* iostat 工具提供CPU使用率及硬盘吞吐效率的数据;
* mpstat 工具提供单个处理器或多个处理器相关数据;
* sar 工具负责收集、报告并存储系统活跃的信息;
* sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行,
是为sadc所设计的程序前端程序;
* sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ,要通过cron来调用
* sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;
* sadf 显示被sar通过多种格式收集的数据;

CentOS Yum只更新安全补丁操作

安装yum插件:

yum install yum-security

使用:检查安全更新

yum --security check-update

只安装安全更新

yum update --security

检查特定软件有无安全更新,列出更新的详细信息

yum info-security software_name

通过Nginx、Uwsgi快速部署Django

uwsgi:是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
运行过程:
nginx作为服务器的最前端,它将接受WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是nginx的强项,静态文件像我们django博客项目中的static文件夹下面的图片,css,js)。



---阅读剩余部分---

-bash: killall: command not found 没有killall命令的解决方法

Centos7精简安装后,使用中发现没有killall命令,但是会有killall5命令,该命令是SystemV中的一个killall(杀死所有进程)命令.它会向所有进程发送一个信号,但调用killall5命令的shell自身不会被kill(杀掉);执行需谨慎;
介绍一下 psmisc :
Psmisc软件包包含三个帮助管理/proc目录的程序。

安装下列程序: fuser, killall,pstree和pstree.x11(到pstree的链接)

fuser 显示使用指定文件或者文件系统的进程的PID。

killall 杀死某个名字的进程,它向运行指定命令的所有进程发出信号。

pstree 树型显示当前运行的进程。

pstree.x11 与pstree功能相同,只是在退出前需要确认。

killall命令安装:
debian、ubuntu系统:

apt-get install psmisc

centos或、rhel系统:

yum install psmisc

最新

分类

归档

评论

  • 安安: 都是af
  • Liang: 嗯,有点不通顺·
  • 王庭威: “MySQL互为主从...
  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...

其它