删除用户ORA-01940: cannot drop a user that is currently connected解决方法

出现场景:Oracle删除用户时报错

SQL〉DROP USER USERXXXX CASCADE

ERROR:ORA-01940: cannot drop a user that is currently connected

由于当前用户正连接到数据库,所以无法删除

解决办法:

1、查询此用户的会话进程,

SQL〉SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='USERXXXX';

SID SERIAL#
---------- ----------
98 27341
23 18117

2、结束此用户的所有会话

SQL>ALTER SYSTEM KILL SESSION '98,27341';

System altered.

SQL>ALTER SYSTEM KILL SESSION '23,18117';

System altered.

如果没有发现会话.要就要看是不是自己当前有没有使用这个用户.

3、删除用户

SQL〉DROP USER USERXXXX CASCADE;

设置MySQL为只读模式

在MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-slave的设置和关系。
对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置:

mysql> show global variables like "%read_only%";
mysql> flush tables with read lock;
mysql> set global read_only=1;
mysql> show global variables like "%read_only%";

将MySQL从只读设置为读写状态的命令:

mysql> unlock tables;
mysql> set global read_only=0;
mysql> set global read_only=1;

将salve库从只读状态变为读写状态,需要执行的命令是:

mysql> set global read_only=0;

对于数据库读写状态,主要靠 “read_only”全局参数来设定;默认情况下,数据库是用于读写操作的,所以read_only参数也是0或faluse状态,这时候不论是本地用户还是远程访问数据库的用户,都可以进行读写操作;如需设置为只读状态,将该read_only参数设置为1或TRUE状态,但设置 read_only=1 状态有两个需要注意的地方:

1.read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 show slave statusG 命令查看salve状态,可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致;

2.read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作;在MySQL中设置read_only=1后,普通的应用用户进行insert、update、delete等会产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数据变化的错误,但具有super权限的用户,例如在本地或远程通过root用户登录到数据库,还是可以进行数据变化的DML操作;
为了确保所有用户,包括具有super权限的用户也不能进行读写操作,就需要执行给所有的表加读锁的命令

flush tables with read lock;

这样使用具有super权限的用户登录数据库,想要发生数据变化的操作时,也会提示表被锁定不能修改的报错。
这样通过 设置

read_only=1;
flush tables with read lock;

两条命令,就可以确保数据库处于只读模式,不会发生任何数据改变,在MySQL进行数据库迁移时,限定master主库不能有任何数据变化,就可以通过这种方式来设定。

但同时由于加表锁的命令对数据库表限定非常严格,如果再slave从库上执行这个命令后,slave库可以从master读取binlog日志,但不能够应用日志,slave库不能发生数据改变,当然也不能够实现主从同步了,这时如果使用

unlock tables;

解除全局的表读锁,slave就会应用从master读取到的binlog日志,继续保证主从库数据库一致同步。

为了保证主从同步可以一直进行,在slave库上要保证具有super权限的root等用户只能在本地登录,不会发生数据变化,其他远程连接的应用用户只按需分配为select,insert,update,delete等权限,保证没有super权限,则只需要将salve设定

set global read_only=1;

模式,即可保证主从同步,又可以实现从库只读。

相对的,设定“read_only=1”只读模式开启的解锁命令为设定

set global read_only=0;

设定全局锁

flush tables with read lock;

对应的解锁模式命令为:

unlock tables;

当然设定了

set global read_only=1;

后,所有的select查询操作都是可以正常进行的。

完整清除Slave同步信息

mysql> stop slave; 
Query OK, 0 rows affected (0.19 sec) 
mysql> reset slave; 
Query OK, 0 rows affected (0.17 sec) 

执行reset slave,其实是把master.info和relay-log.info文件给删除,但里面的同步信息还在,使用reset slave all; 可以全部清除;

mysql> reset slave all; 
Query OK, 0 rows affected (0.04 sec) 
mysql> show slave status\G; 
Empty set (0.02 sec) 
 
ERROR:  
No query specified 

MHA切换过程中需要注意的问题

1.切换过程会自动把read_only关闭

2.切换之后需要删除手工删除/masterha/app1/app1.failover.complete,才能进行第二次测试

3.一旦发生切换管理进程将会退出,无法进行再次测试,需将故障数据库加入到MHA环境中来

4.原主节点重新加入到MHA时只能设置为slave,在之前需要先 reset slave

RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.121.165',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='xxxxxx',MASTER_AUTO_POSITION=508;
START SLAVE;
SHOW SLAVE STATUS\G;

5、ip地址的接管有几种方式,这里采用的是MHA自动调用IP别名的方式,好处是在能够保证数据库状态与业务IP切换的一致性。启动管理节点
之后VIP会自动别名到当前主节点上,Keepalived也只能做到对3306的健康检查,但是做不到比如像MySQL复制中的Slave-SQL、Slave-IO进程的检查,容易出现对切换的误判。

6.注意:二级从服务器需要将log_slave_updates打开

7.手工切换需要先定义好master_ip_online_change_script脚本,不然只会切换mysql,IP地址不会绑定上去,可以根据模板来配置该脚本

8.通过设置no_master=1可以让某一个节点永远不成为新的主节点

恢复集群运行

在manager上删除app1.failover.complete文件

cd /masterha/app1
rm -f default.failover.complete 

原master主节点服务启动

service mysql start 

检查原master主节点上数据库内容和原Slave1上一致以后,可以进行切换操作
原master主节点停止slave、设置read_only为OFF

stop slave;
set global read_only=1;

原Slave1上启动slave、设置read_only为ON

start slave;
set global read_only=0;

manager管理节点,检查同步

masterha_check_repl --conf=/etc/masterha/default.cnf

需注意:按如上步骤操作后,此时163节点作为slaver已加入到集群中,但是宕机这段时间165、166中新产生的数据在163中没有,所以还需要先从主节点备份导入最新的数据再启动同步
启动MHA

nohup masterha_manager --conf=/etc/masterha/default.cnf > /mha/app1/mha_manager.log &

回切:
同样的道理,以上步骤配置无问题的话停止当前master的MySQL进程,MHA可直接切换master至原节点(需要修改default.cnf配置文件)

MHA报错记录整理

masterha_check_repl--conf=/etc/masterha/default.cnf
 [warning] Global configuration file/etc/masterha_default.cnf not found. Skipping.
 [info] Reading application default configuration from/etc/masterha/app1.cnf..
 [info] Reading server configuration from/etc/masterha/default.cnf..
 [info] MHA::MasterMonitor version 0.56.
 [error][/usr/local/share/perl5/MHA/Server.pm,ln303]  Getting relay log directory orcurrent relay logfile from replication table failed on192.168.121.1630(192.168.121.163:3306)!
 [error][/usr/local/share/perl5/MHA/MasterMonitor.pm,ln424] Error happened on checking configurations.  at /usr/local/share/perl5/MHA/ServerManager.pmline 315
 [error][/usr/local/share/perl5/MHA/MasterMonitor.pm,ln523] Error happened on monitoring servers.
 [info] Got exit code 1 (Not master dead).
 
MySQL Replication Health is NOT OK!

检查每台机器的my.cnf,是否有以下三项:

relay-log=/data/mysql/binlog/mysql-relay-bin
master_info_repository = file
relay_log_info_repository = file

如果master_info_repository 和 relay_log_info_repository的值是Table需要修改为file,
my.cnf里面不要设置read_only = 1,否则MHA切换的时候会出问题,直接在线设置即可;

Can't exec "mysqlbinlog": No suchfile or directory at /usr/local/share/perl5/MHA/BinlogManager.pm line 106.
解决方法:

[root@data02 ~]# type mysqlbinlog
mysqlbinlog is/usr/local/mysql/bin/mysqlbinlog
[root@data02 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

Testing mysql connection and privileges..sh: mysql: command not found
mysql command failed with rc 127:0!
解决方法:

ln -s /usr/local/mysql/bin/mysql/usr/bin/mysql

各机器都需加下软连接。

MHA管理节点目录权限问题
如果在管理节点使用了非root用户进行mha管理,则需要相关权限,否则报错
如下我们使用mysql用户管理mha,则在root账户先创建相关目录,在赋权给mysql
# mkdir -p /var/log/masterha/app1
# chown -R mysql:mysql /var/log/masterha
# su - mysql
$ masterha_check_repl --conf=/etc/app1.cnf 使用mysql用户校验复制关系

需要添加用于登陆到mysql服务器账户
需要STOP SLAVE, CHANGE MASTER, RESET SLAVE等相关权限,该账户要添加到mha配置文件中,主从切换时用到
在mysql数据库各节点执行,如下由于跨网段,所以分配了跨网段账户,否则,单条赋权即可

  mysql> grant all privileges on *.* to 'mha'@'172.16.16.%' identified by '***';
  Query OK, 0 rows affected (0.00 sec)
  
  mysql> grant all privileges on *.* to 'mha'@'192.168.1.%' identified by '***';
  Query OK, 0 rows affected (0.00 sec)

Mon Jan 22 21:40:41 2018 - error Multi-master configuration is detected, but all of them are read-only! Check configurations for details. Master configurations are as below:
解决方法:
Master设置

mysql> set global read_only=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | OFF   |
+---------------+-------+
1 row in set (0.01 sec)

Slave设置


mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)

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

需要添加用于建立复制关系的账户
在mysql数据库各节点执行,如下由于跨网段,所以分配了跨网段账户,否则,单条赋权即可

  mysql> grant replication slave on *.* to 'repl'@'172.16.16.%' identified by '***';
  Query OK, 0 rows affected (0.00 sec)
  
  mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '***';
  Query OK, 0 rows affected (0.00 sec)

从库的各客户端应开启binlog,即log_bin=on
未开启则收到如下提示:

  Mon Apr 13 20:02:15 2017 - [warning]  log-bin is not set on slave SZ-DB-SLAVE01(192.168.81.3:3306). 
  This host cannot be a master.

各主从库应该使用相同的复制过滤规则
否则收到如下的错误提示:

  Mon Apr 13 20:02:15 2017 - [error][/usr/lib/perl5/site_perl/5.8.8/MHA/ServerManager.pm, ln546] Replication 
      filtering check failed on dbsrv3(192.168.1.3:3306)! All slaves must have same replication filtering rules.
      Check SHOW SLAVE STATUS output and set my.cnf correctly.
  Mon Apr 13 20:02:15 2017 - [warning] Bad Binlog/Replication filtering rules:

各从库应设置relay_log_purge=0
否则收到以下告警信息 ##mysql -e 'set global relay_log_purge=0' 动态修改该参数,因为随时slave会提升为master。补充@150420

  Mon Apr 13 20:02:15 2017 - [warning]  relay_log_purge=0 is not set on slave vdbsrv2(172.16.16.12:3306).

各从库设置read_only=1
否则收到以下告警信息 ## mysql -e 'set global read_only=1' 动态修改该参数,因为随时slave会提升为master。补充@150420

  Mon Apr 13 20:19:54 2017 - [info]  read_only=1 is not set on slave vdbsrv3(172.16.16.13:3306).

CentOS7.4搭建MHA环境

MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移。虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失最新数据。

MHA监控复制架构的主服务器,一旦检测到主服务器故障,就会自动进行故障转移。即使有些从服务器没有收到最新的relay log,MHA自动从最新的从服务器上识别差异的relay log并把这些日志应用到其他从服务器上,因此所有的从服务器保持一致性了。还可以设置优先级指定其中的一台slave作为master的候选,由于MHA在slaves之间修复一致性,因此可以将slave变成新的master,其他的slave都以其作为新master。
jq.png
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,阿里也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。
MHA作用:
1)从宕机崩溃的master保存二进制日志事件(binlog events);

2)识别含有最新更新的slave;

3)应用差异的中继日志(relay log)到其他的slave;

4)应用从master保存的二进制日志事件(binlog events);

5)提升一个slave为新的master;

6)使其他的slave连接新的master进行复制;

MHA有两部分组成,MHA Manager(管理节点)和MHA Node(数据节点):
1:MHA Manager可以单独部署在一台独立机器上管理多个master-slave集群,也可以部署在一台slave上。MHA Manager探测集群的node节点,当master出现故障的时它可以自动将具有最新数据的slave提升为新的master,然后将所有其它的slave导向新的master上。整个故障转移过程对应用程序是透明的。
2:MHA node运行在每台MySQL服务器上(master/slave/manager),它通过监控具备解析和清理logs功能的脚本来加快故障转移的。
Manager工具包主要包括以下几个工具:

masterha_check_ssh              检查MHA的SSH配置状况
masterha_check_repl             检查MySQL复制状况
masterha_manger                 启动MHA
masterha_check_status           检测当前MHA运行状态
masterha_master_monitor         检测master是否宕机
masterha_master_switch          控制故障转移(自动或者手动)
masterha_conf_host              添加或删除配置的server信息

Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs                保存和复制master的二进制日志
apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs                清除中继日志(不会阻塞SQL线程)

MHA搭建步骤如下:
1、系统初始化
防火墙和selinux都关闭,修改时区、校验时间

systemctl stop firewall
systemctl stop firewalld
cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted 
[root@master tmp]# getenforce 
Disabled
[root@manager ~]# crontab -l
*/30 * * * * /usr/sbin/ntpdate pool.ntp.org
[root@manager ~]# date -R
Mon, 22 Jan 2018 20:28:29 +0800

MySQL安装参见:Centos7.3编译安装MySQL 5.7.17

2、根据实际场景修改主机名,并加入/etc/hosts中

192.168.121.163     master
192.168.121.165     slave1
192.168.121.166     slave2
192.168.121.169    manager

用ssh-keygen实现四台主机之间相互免密钥登录:
生成密钥,四台机器都依次操作
[master,slave1,slave2,manager]

cd /root
ssh-keygen -t rsa 
scp .ssh/id_rsa.pub master:/root/.ssh/master.pub 
scp .ssh/id_rsa.pub master:/root/.ssh/slave1.pub
scp .ssh/id_rsa.pub master:/root/.ssh/manager.pub

导入公钥

cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys slave1:/root/.ssh/authorized_keys 
scp ~/.ssh/authorized_keys slave2:/root/.ssh/authorized_keys 
scp ~/.ssh/authorized_keys manager:/root/.ssh/authorized_keys 

最后实现直接ssh hostname即可登录主机;
3、安装MHAmha4mysql-node,mha4mysql-manager 软件包:

yum install epel-release -y 
yum install perl cpan perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y
wget https://downloads.mariadb.com/MHA/mha4mysql-node-0.54-0.el6.noarch.rpm
wget https://downloads.mariadb.com/MHA/mha4mysql-manager-0.55-0.el6.noarch.rpm
rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm

4、实现master,slave1,slave2之间主从复制

参见:MySQL5.7.18基于GTID的主从复制过程实现

5、管理机manager上配置MHA文件
1.创建目录

mkdir -p /masterha/app1
mkdir /etc/masterha
vim /etc/masterha/default.cnf
[server default]
user=root
password=123456
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
remote_workdir=/masterha/app1
ssh_user=root
repl_user=repl
repl_password=123456
ping_interval=1  #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
shutdown_script="" //设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)(可省略)
master_ip_online_change_script="" //设置手动切换时候的切换脚本(可省略)
report_script="/usr/bin/masterha_report_script" //设置发生切换后发送的报警的脚本(可省略)
master_ip_failover_script="/usr/bin/masterha_ip_failover" //设置自动failover时候的切换脚本(可省略)
[server1]
hostname=slave1
master_binlog_dir=/data/mysql/binlog
candidate_master=1 //设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中时间最新的slave

#relay_log_purge=0
[server2]
hostname=master
master_binlog_dir=/data/mysql/binlog
candidate_master=1
[server3]
hostname=slave2
master_binlog_dir=/data/mysql/binlog
no_master=1

6、masterha_check_ssh工具验证ssh信任登录是否成功
[manager]

masterha_check_ssh --conf=/etc/masterha/default.cnf

Mon Jan 22 20:48:59 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Mon Jan 22 20:48:59 2018 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
Mon Jan 22 20:48:59 2018 - [info] Reading server configurations from /etc/masterha/default.cnf..
Mon Jan 22 20:48:59 2018 - [info] Starting SSH connection tests..
Mon Jan 22 20:49:00 2018 - [debug] 
Mon Jan 22 20:48:59 2018 - [debug]  Connecting via SSH from root@slave1(192.168.121.165:22) to root@master(192.168.121.163:22)..
Mon Jan 22 20:48:59 2018 - [debug]   ok.
Mon Jan 22 20:48:59 2018 - [debug]  Connecting via SSH from root@slave1(192.168.121.165:22) to root@slave2(192.168.121.166:22)..
Mon Jan 22 20:49:00 2018 - [debug]   ok.
Mon Jan 22 20:49:00 2018 - [debug] 
Mon Jan 22 20:48:59 2018 - [debug]  Connecting via SSH from root@master(192.168.121.163:22) to root@slave1(192.168.121.165:22)..
Mon Jan 22 20:49:00 2018 - [debug]   ok.
Mon Jan 22 20:49:00 2018 - [debug]  Connecting via SSH from root@master(192.168.121.163:22) to root@slave2(192.168.121.166:22)..
Mon Jan 22 20:49:00 2018 - [debug]   ok.
Mon Jan 22 20:49:01 2018 - [debug] 
Mon Jan 22 20:49:00 2018 - [debug]  Connecting via SSH from root@slave2(192.168.121.166:22) to root@slave1(192.168.121.165:22)..
Mon Jan 22 20:49:00 2018 - [debug]   ok.
Mon Jan 22 20:49:00 2018 - [debug]  Connecting via SSH from root@slave2(192.168.121.166:22) to root@master(192.168.121.163:22)..
Mon Jan 22 20:49:01 2018 - [debug]   ok.
Mon Jan 22 20:49:01 2018 - [info] All SSH connection tests passed successfully.

7、masterha_check_repl工具验证mysql复制是否成功
[manager]

masterha_check_repl --conf=/etc/masterha/default.cnf

Mon Jan 22 20:50:27 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Mon Jan 22 20:50:28 2018 - [info] Reading application default configurations from /etc/masterha/app1.cnf..
Mon Jan 22 20:50:28 2018 - [info] Reading server configurations from /etc/masterha/default.cnf..
Mon Jan 22 20:50:28 2018 - [info] MHA::MasterMonitor version 0.55.
Mon Jan 22 20:50:29 2018 - [info] Multi-master configuration is detected. Current primary(writable) master is master(192.168.121.163:3306)
Mon Jan 22 20:50:29 2018 - [info] Master configurations are as below: 
Master slave1(192.168.121.165:3306), replicating from 192.168.121.163(192.168.121.163:3306), read-only
Master master(192.168.121.163:3306), replicating from 192.168.121.165(192.168.121.165:3306)

Mon Jan 22 20:50:29 2018 - [info] Dead Servers:
Mon Jan 22 20:50:29 2018 - [info] Alive Servers:
Mon Jan 22 20:50:29 2018 - [info]   slave1(192.168.121.165:3306)
Mon Jan 22 20:50:29 2018 - [info]   master(192.168.121.163:3306)
Mon Jan 22 20:50:29 2018 - [info]   slave2(192.168.121.166:3306)
Mon Jan 22 20:50:29 2018 - [info] Alive Slaves:
Mon Jan 22 20:50:29 2018 - [info]   slave1(192.168.121.165:3306)  Version=5.7.21-log (oldest major version between slaves) log-bin:enabled
Mon Jan 22 20:50:29 2018 - [info]     Replicating from 192.168.121.163(192.168.121.163:3306)
Mon Jan 22 20:50:29 2018 - [info]     Primary candidate for the new Master (candidate_master is set)
Mon Jan 22 20:50:29 2018 - [info]   slave2(192.168.121.166:3306)  Version=5.7.21-log (oldest major version between slaves) log-bin:enabled
Mon Jan 22 20:50:29 2018 - [info]     Replicating from 192.168.121.163(192.168.121.163:3306)
Mon Jan 22 20:50:29 2018 - [info]     Not candidate for the new Master (no_master is set)
Mon Jan 22 20:50:29 2018 - [info] Current Alive Master: master(192.168.121.163:3306)
Mon Jan 22 20:50:29 2018 - [info] Checking slave configurations..
Mon Jan 22 20:50:29 2018 - [warning]  relay_log_purge=0 is not set on slave slave1(192.168.121.165:3306).
Mon Jan 22 20:50:29 2018 - [warning]  relay_log_purge=0 is not set on slave slave2(192.168.121.166:3306).
Mon Jan 22 20:50:29 2018 - [info] Checking replication filtering settings..
Mon Jan 22 20:50:29 2018 - [info]  binlog_do_db= , binlog_ignore_db= 
Mon Jan 22 20:50:29 2018 - [info]  Replication filtering check ok.
Mon Jan 22 20:50:29 2018 - [info] Starting SSH connection tests..
Mon Jan 22 20:50:31 2018 - [info] All SSH connection tests passed successfully.
Mon Jan 22 20:50:31 2018 - [info] Checking MHA Node version..
Mon Jan 22 20:50:32 2018 - [info]  Version check ok.
Mon Jan 22 20:50:32 2018 - [info] Checking SSH publickey authentication settings on the current master..
Mon Jan 22 20:50:32 2018 - [info] HealthCheck: SSH to master is reachable.
Mon Jan 22 20:50:33 2018 - [info] Master MHA Node version is 0.54.
Mon Jan 22 20:50:33 2018 - [info] Checking recovery script configurations on the current master..
Mon Jan 22 20:50:33 2018 - [info]   Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/data/mysql/binlog --output_file=/masterha/app1/save_binary_logs_test --manager_version=0.55 --start_file=binlog.000024 
Mon Jan 22 20:50:33 2018 - [info]   Connecting to root@master(master).. 
  Creating /masterha/app1 if not exists..    ok.
  Checking output directory is accessible or not..
   ok.
  Binlog found at /data/mysql/binlog, up to binlog.000024
Mon Jan 22 20:50:33 2018 - [info] Master setting check done.
Mon Jan 22 20:50:33 2018 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..
Mon Jan 22 20:50:33 2018 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='root' --slave_host=slave1 --slave_ip=192.168.121.165 --slave_port=3306 --workdir=/masterha/app1 --target_version=5.7.21-log --manager_version=0.55 --relay_log_info=/data/mysql/relay-log.info  --relay_dir=/data/mysql/  --slave_pass=xxx
Mon Jan 22 20:50:33 2018 - [info]   Connecting to root@192.168.121.165(slave1:22).. 
  Checking slave recovery environment settings..
    Opening /data/mysql/relay-log.info ... ok.
    Relay log found at /data/mysql/binlog, up to mysql-relay-bin.000002
    Temporary relay log file is /data/mysql/binlog/mysql-relay-bin.000002
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
 done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Mon Jan 22 20:50:34 2018 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='root' --slave_host=slave2 --slave_ip=192.168.121.166 --slave_port=3306 --workdir=/masterha/app1 --target_version=5.7.21-log --manager_version=0.55 --relay_log_info=/data/mysql/relay-log.info  --relay_dir=/data/mysql/  --slave_pass=xxx
Mon Jan 22 20:50:34 2018 - [info]   Connecting to root@192.168.121.166(slave2:22).. 
  Checking slave recovery environment settings..
    Opening /data/mysql/relay-log.info ... ok.
    Relay log found at /data/mysql/binlog, up to mysql-relay-bin.000003
    Temporary relay log file is /data/mysql/binlog/mysql-relay-bin.000003
    Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure.
 done.
    Testing mysqlbinlog output.. done.
    Cleaning up test file(s).. done.
Mon Jan 22 20:50:34 2018 - [info] Slaves settings check done.
Mon Jan 22 20:50:34 2018 - [info] 
master (current master)
 +--slave1
 +--slave2

Mon Jan 22 20:50:34 2018 - [info] Checking replication health on slave1..
Mon Jan 22 20:50:34 2018 - [info]  ok.
Mon Jan 22 20:50:34 2018 - [info] Checking replication health on slave2..
Mon Jan 22 20:50:34 2018 - [info]  ok.
Mon Jan 22 20:50:34 2018 - [warning] master_ip_failover_script is not defined.
Mon Jan 22 20:50:34 2018 - [warning] shutdown_script is not defined.
Mon Jan 22 20:50:34 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

8、启动MHA manager,并监控日志文件

masterha_manager --conf=/etc/masterha/default.cnf 
tail -f /masterha/app1/manager.log 

9、测试master(宕机后,是否会自动切换
[master]

[root@master ~]# service mysql stop
Shutting down MySQL..... SUCCESS! 

宕掉master后,/masterha/app1/manager.log文件显示:

tail -f /masterha/app1/manager.log 
......
Generating relay diff files from the latest slave succeeded.
slave2: OK: Applying all logs succeeded. Slave started, replicating from slave1.
slave1: Resetting slave info succeeded.
Master failover to slave1(192.168.121.165:3306) completed successfully. 

上面的结果表明master成功切换。

JIRA更改JVM默认内存大小 提高访问速度

在配置文件"setenv.sh"里面修改JVM_MINIMUM_MEMORY和JVM_MAXIMUM_MEMORY内存参数的默认大小为:

JVM_MINIMUM_MEMORY="2048m"
JVM_MAXIMUM_MEMORY="4096m"

根据系统内存大小设置,如果参数里面有CATALINA_OPTS参数,将Xms和Xmx的值和JVM的修改成一致,

CATALTINA_OPTS="-Xms2048M -Xmx4096m -XX:+UseGLGC ${CATALTINA_OPTS}"

最后重启jira服务即可,

./bin/stop-jira.sh 
./bin/start-jira.sh

Centos7 添加sudo 权限 禁用每次sudo 需要输入密码

安装完centos7后,默认没有启用sudo,首先应该是对sudo进行设置。
sudo的作用就是使当前非root用户在使用没有权限的命令 时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完成root用户的功能,而不必在每次使用su -来回切换用户了。
sudo的配置文件位于/etc/sudoers,需要root权限才可以读写。
找到root ALL=(ALL) ALL这一行,在后面再加上一行就可以了(不用引号):

username ALL=(ALL) ALL

其中username为指定的使用sudo的用户,引号内的空格为tab
如果你想每次使用sudo命令的时候都提示你输入根密码,移动到这一行:

#%wheel ALL=(ALL) ALL

解除#号注释
如果你不想每次使用sudo命令的时候都提示你输入跟密码,移动到下面这一行:

#%wheel ALL=(ALL)NOPASSWD:ALL

解除#号注释
保存后退出
添加tomcat用sudo免密码:

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL
%tomcat ALL=(ALL) NOPASSWD:ALL

MySQL的show_compatibility_56参数

5.7以后System and status 变量需要从performance_schema中进行获取,information_schema仍然保留了GLOBAL_STATUS,GLOBAL_VARIABLES两个表做兼容,如果希望沿用information_schema中进行查询的习惯,5.7提供了show_compatibility_56参数,设置为ON可以兼容5.7之前的用法,如果为OFF,查询information_schema库的global_variables时报错:

mysql> use information_schema
mysql> select * from global_variables;
ERROR 3167 (HY000): The 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' feature is disabled; see the documentation for 'show_compatibility_56'

--查看show_compatibility_56其值

mysql> show variables like '%show_compatibility_56%';  
+-----------------------+-------+  
| Variable_name         | Value |  
+-----------------------+-------+  
| show_compatibility_56 | OFF   |  
+-----------------------+-------+  
1 row in set (0.01 sec)  

--把show_compatibility_56打开

mysql> set global show_compatibility_56=on;  
Query OK, 0 rows affected (0.00 sec)  
  
mysql> show variables like '%show_compatibility_56%';  
+-----------------------+-------+  
| Variable_name         | Value |  
+-----------------------+-------+  
| show_compatibility_56 | ON    |  
+-----------------------+-------+  
1 row in set (0.00 sec)  

再次查看:


mysql> select * from information_schema.global_status limit 3;  
+-----------------------+----------------+  
| VARIABLE_NAME         | VARIABLE_VALUE |  
+-----------------------+----------------+  
| ABORTED_CLIENTS       | 0              |  
| ABORTED_CONNECTS      | 0              |  
| BINLOG_CACHE_DISK_USE | 0              |  
+-----------------------+----------------+  
3 rows in set, 1 warning (0.00 sec)  

VIA:http://mysql.taobao.org/monthly/2016/06/02/

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行计数仅是大概估计值.

最新

分类

归档

评论

  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...
  • aliang: 默认不屏蔽估计开发团...
  • 山野愚人居: PHP既然允许直接使...
  • aliang: 最下面有github地址·

其它