Rao's Blog

  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

VPN

发表于 2019-11-13 | 更新于 2020-04-08 | 分类于 其他

Haier VPN 系统使用指南

青岛

1
2
cu.vpn.haier.net:10445  # 联通
ct.vpn.haier.net:10445 # 电信

北京

1
123.103.113.249:8443

mac 访问内网

  • 连无线 Haier-Corp
  • 使用工号登录 1.1.1.3
  • 打开网络偏好设置,修改 DNS 为:10.138.40.212、10.138.40.213

CentOS 6 与 CentOS 7 防火墙设置及开放端口

发表于 2019-11-13 | 分类于 Linux

简介

CentOS 升级到 7 之后,内置的防火墙已经从 iptables 变成了 firewalld,不同操作系统设置的方式不同。

CentOS 6

  • 打开/关闭/重启防火墙
1
2
3
4
5
6
chkconfig iptables on       # 开启防火墙
chkconfig iptables off # 关闭防火墙
service iptables start # 开启防火墙
service iptables stop # 关闭防火墙
service iptables restarted # 重启防火墙
iptables -F # 清除防火墙规则
  • 打开端口
1
2
3
4
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT   # 打开22端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT # 打开3306端口
/etc/rc.d/init.d/iptables save # 保存防火墙
/etc/init.d/iptables restart # 重启防火墙
  • 查看打开的端口
1
/etc/init.d/iptables status

CentOS 7

  • 打开/关闭/重启防火墙
1
2
3
systemctl start firewalld  # 启用防火墙
systemctl stop firewalld # 停止防火墙
systemctl status firewalld # 查看状态
  • 打开端口
1
2
firewall-cmd --zone=public --add-port=80/tcp # 永久生效再加上--permanent
firewall-cmd --reload # 更新防火墙规则
  • 查看打开的端口
1
firewall-cmd --zone=public --list-ports

PostgreSQL

发表于 2019-11-13 | 更新于 2020-06-22 | 分类于 PostgreSQL

背景

  • 描述:人力题库数据库即将下线,需要保存数据副本到本地数据库。
  • 源库:PostgreSQL 9.2.8
  • 目标库:10.133.0.52 / PostgreSQL 11.5
迁移表 说明 数据量 状态
t_ems_base 题库 3139 OK
t_ems_base_category 题库类别 164 OK
t_ems_item 试题 500378 OK
t_ems_item_option 试题选项 1250290 OK
t_ems_paper 试卷 3262 OK
t_ems_paper_item_rel 试卷试题 1920540 OK
t_ems_info 考试 36229 OK
t_ems_result 考试成绩 1052490 OK
t_ems_result_detail 考试答题详情 69602800 ?

PostgreSQL

简介

PostgreSQL 是一个免费的对象-关系数据库服务 (ORDBMS),ORDBMS 面向对象数据库管理系统,将所有实体都看着对象,并将这些对象类进行封装,对象之间的通信通过消息,ORDBMS 对象关系数据库在实质上还是关系数据库 。

安装

  • 操作系统:CentOS Linux release 7.4.1708 (Core)
  • 安装版本:PostgreSQL 11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 下载rpm包
yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm -y

# 安装
yum -y install postgresql11 postgresql11-server postgresql11-libs

# 初始化数据库
/usr/pgsql-11/bin/postgresql-11-setup initdb # /usr/pgsql-11/bin/initdb -D /data/postgresql

# 设置开机自启动PostgreSQL和启动服务
systemctl enable postgresql-11
systemctl start postgresql-11
systemctl status postgresql-11

● postgresql-11.service - PostgreSQL 11 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disablesd)
Active: active (running) since 三 2019-11-13 10:11:05 CST; 6s ago
Docs: https://www.postgresql.org/docs/11/static/
Process: 84380 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 84386 (postmaster)
CGroup: /system.slice/postgresql-11.service
├─84386 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
├─84388 postgres: logger
├─84390 postgres: checkpointer
├─84391 postgres: background writer
├─84392 postgres: walwriter
├─84393 postgres: autovacuum launcher
├─84394 postgres: stats collector
├─84395 postgres: logical replication launcher
└─84417 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/

# 修改数据存储目录
systemctl stop postgresql-11
mkdir /data/postgresql
chown -R postgres:postgres postgresql
chmod 700 /data/postgresql
vi /data/postgresql/postgresql.conf # data_directory = '/data/postgresql'
vi /usr/lib/systemd/system/postgresql-11.service # Environment=PGDATA=/data/postgresql
systemctl restart postgresql-11

$ su - postgres
-bash-4.2$ psql
postgres=# show data_directory;
data_directory
------------------
/data/postgresql

后台登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ su - postgres
-bash-4.2$ psql
psql (11.5)
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit

# 配置Navicate可登录 <postgres/Haier@123>
# pg_hba.conf:配置对数据库的访问权限
# postgresql.conf:配置PostgreSQL数据库服务器的相应的参数

vi /data/postgresql/postgresql.conf # listen_addresses = '*'
vi /data/postgresql/pg_hba.conf # 文件末尾添加 host all all 0.0.0.0/0 trust

# 开启防火墙5432端口
firewall-cmd --zone=public --add-port=5432/tcp --permanent # 永久生效再加上 permanent
firewall-cmd --reload # 更新防火墙规则
firewall-cmd --zone=public --list-ports

# 修改登录密码
sudo -u postgres psql
ALTER USER postgres WITH password 'Haier@123';

客户端登录

  • 安装 Navicate
  • 登录数据库
    • 主机:10.133.0.52
    • 端口:5432
    • 数据库:postgres
    • 用户名:postgres
    • 密码:Haier@123

日常运维

  • 登录数据库
1
psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432
  • 创建账号和数据库
1
2
3
CREATE USER dbuser WITH PASSWORD 'password';
CREATE DATABASE exampledb OWNER dbuser;
GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
  • 控制台命令

“postgres=#”,表示这时已经进入了数据库控制台,除了 \q 命令(退出)以外,控制台还提供一系列其他命令:

1
2
3
4
5
6
7
8
9
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。
  • 数据库操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 创建新表
CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);

# 插入数据
INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');

# 选择记录
SELECT * FROM user_tbl;

# 更新数据
UPDATE user_tbl set name = '李四' WHERE name = '张三';

# 删除记录
DELETE FROM user_tbl WHERE name = '李四' ;

# 添加栏位
ALTER TABLE user_tbl ADD email VARCHAR(40);

# 更新结构
ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;

# 更名栏位
ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;

# 删除栏位
ALTER TABLE user_tbl DROP COLUMN email;

# 表格更名
ALTER TABLE user_tbl RENAME TO backup_tbl;

# 删除表格
DROP TABLE IF EXISTS backup_tbl;
  • 数据迁移

PostgreSQL 9

1
2
3
4
5
6
7
8
9
yum install postgresql-server postgresql-contrib
postgresql-setup initdb

vi /var/lib/pgsql/data/pg_hba.conf ## host all all 0.0.0.0/0 md5
vi /var/lib/pgsql/data/postgresql.conf ## listen_addresses='*'

systemctl start postgresql
systemctl enable postgresql
systemctl status postgresql

MySQL · binlog 日志

发表于 2019-11-07 | 更新于 2021-03-30 | 分类于 MySQL

简介

Binlog:也称二进制日志,是 MySQL 最重要的日志,记录所有数据库表结构变更(如 CREATE、ALTER TABLE)以及表数据修改(如 INSERT、UPDATE、DELETE),不会记录 SELECT 和 SHOW 这类操作,主要作用:复制(主从同步)、恢复和审计。

日志格式 记录说明 优点 缺点
STATEMENT 记录的是修改 SQL 语句 日志文件小,节约 IO 准确性差,一些系统函数不能准确复制
ROW 记录的是每行实际数据的变更 准确性强,能准确复制数据的变更 文件日志大,较大的磁盘和网络 IO
MIXED 以上两种模式的混合 准确性强,文件大小适中 有可能发生主从不一致问题

配置参数

1
2
3
4
5
[mysqld]
binlog_format = mixed
log_bin = /data/mysql/mysql-bin.log
expire_logs_days = 7
max_binlog_size = 1G
参数 含义
log_bin = { on | off | base_name } 指定是否启用二进制日志或者指定一个日志路径
binlog_format = { mixed | row | statement } 指定二进制日志格式
expire_logs_days 指定二进制日志过期时间
sql_log_bin = { on | off } 指定是否启用记录二进制日志
log_bin_index 指定 mysql-bin.index 文件路径
max_binlog_size 指定二进制日志文件最大值
binlog_cache_size 指定事务日志缓存区大小
max_binlog_cache_size 指定二进制日志缓存最大值
sync_binlog = { 0 | n } 指定写缓冲多少次,刷一次盘

操作

  • 查看 binlog:mysqlbinlog
  • 删除 binlog
1
2
3
4
5
6
7
8
9
# 手工删除
purge master logs to "mysql-bin.xx"

# 自动清理
set global expire_logs_days=N;
flush logs;

# 查看binlogs
show binary logs

问题

  • MySQL · 案例分析 · 大事务导致 binlog 暴增
  • MySQL · 案例分析 · 未设置过期时间导致 binlog 堆积

MySQL · 案例分析 · 大事务导致 binlog 暴增

发表于 2019-11-07 | 更新于 2019-11-15 | 分类于 MySQL

问题现象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@cosmoim-db04 data]# ll -h
total 819G
....
-rw-rw---- 1 mysql mysql 214 Nov 6 21:53 relay-log.001998
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:54 relay-log.001999
-rw-rw---- 1 mysql mysql 29M Nov 6 21:54 relay-log.002000
-rw-rw---- 1 mysql mysql 214 Nov 6 21:54 relay-log.002001
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:55 relay-log.002002
-rw-rw---- 1 mysql mysql 29M Nov 6 21:55 relay-log.002003
-rw-rw---- 1 mysql mysql 214 Nov 6 21:55 relay-log.002004
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:55 relay-log.002005
-rw-rw---- 1 mysql mysql 29M Nov 6 21:55 relay-log.002006
-rw-rw---- 1 mysql mysql 214 Nov 6 21:55 relay-log.002007
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:56 relay-log.002008
-rw-rw---- 1 mysql mysql 29M Nov 6 21:56 relay-log.002009
-rw-rw---- 1 mysql mysql 214 Nov 6 21:56 relay-log.002010
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:56 relay-log.002011
-rw-rw---- 1 mysql mysql 29M Nov 6 21:56 relay-log.002012
-rw-rw---- 1 mysql mysql 214 Nov 6 21:56 relay-log.002013
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:57 relay-log.002014
-rw-rw---- 1 mysql mysql 29M Nov 6 21:57 relay-log.002015
-rw-rw---- 1 mysql mysql 214 Nov 6 21:57 relay-log.002016
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:58 relay-log.002017
-rw-rw---- 1 mysql mysql 29M Nov 6 21:58 relay-log.002018
-rw-rw---- 1 mysql mysql 214 Nov 6 21:58 relay-log.002019
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:58 relay-log.002020
-rw-rw---- 1 mysql mysql 29M Nov 6 21:58 relay-log.002021
-rw-rw---- 1 mysql mysql 214 Nov 6 21:58 relay-log.002022
-rw-rw---- 1 mysql mysql 1.1G Nov 6 21:59 relay-log.002023
-rw-rw---- 1 mysql mysql 29M Nov 6 21:59 relay-log.002024
-rw-rw---- 1 mysql mysql 214 Nov 6 21:59 relay-log.002025
-rw-rw---- 1 mysql mysql 1.1G Nov 6 22:00 relay-log.002026
-rw-rw---- 1 mysql mysql 29M Nov 6 22:00 relay-log.002027
-rw-rw---- 1 mysql mysql 214 Nov 6 22:00 relay-log.002028
....

原因分析

解析 relaylog 日志,发现执行的是一个 update 大事务

1
mysqlbinlog --base64-output=decode-rows --verbose relay-log.001999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#191106 21:53:01 server id 13823283  end_log_pos 342 CRC32 0x50ae56cd 	Table_map: `cosmo-aps`.`bns_aps_versiontolineinfo` mapped to number 417
# at 505
#191106 21:53:01 server id 13823283 end_log_pos 8504 CRC32 0xc3c33b83 Update_rows: table id 417
# at 8667
#191106 21:53:01 server id 13823283 end_log_pos 16666 CRC32 0xc7ccd23c Update_rows: table id 417
# at 16829
#191106 21:53:01 server id 13823283 end_log_pos 24828 CRC32 0x870a1ba0 Update_rows: table id 417
# at 24991
#191106 21:53:01 server id 13823283 end_log_pos 32990 CRC32 0x310a7ba8 Update_rows: table id 417
# at 33153
#191106 21:53:01 server id 13823283 end_log_pos 41152 CRC32 0x84202102 Update_rows: table id 417
# at 41315
#191106 21:53:01 server id 13823283 end_log_pos 49314 CRC32 0xaaf45c6e Update_rows: table id 417
# at 49477
#191106 21:53:01 server id 13823283 end_log_pos 57476 CRC32 0x3e307bcb Update_rows: table id 417
# at 57639
#191106 21:53:01 server id 13823283 end_log_pos 65638 CRC32 0x4832b399 Update_rows: table id 417
# at 65801
#191106 21:53:01 server id 13823283 end_log_pos 73800 CRC32 0x941f87fe Update_rows: table id 417
# at 73963
#191106 21:53:01 server id 13823283 end_log_pos 81962 CRC32 0xbacbfa92 Update_rows: table id 417
......

#191106 21:53:01 server id 13823283 end_log_pos 38061530 CRC32 0x15876ee5 Update_rows: table id 417 flags: STMT_END_F
### UPDATE `cosmo-aps`.`bns_aps_versiontolineinfo`
### WHERE
### @1='be2080a3-3815-48ee-b73e-2f18cbe3b4a8'
### @2=NULL
### @3='9790'
### @4=''
### @5='CE0EQ8000'
### @6='XQG52-Q718(灰)'
### @7=''
### @8=NULL
### @9='N500'
### @10='30'
### @11='T6'
### @12=''
### @13=1
### @14=''
### @15='在产'
### @16=''
### @17=''
### @18=''
### @19='管理员'
### @20='2018-08-31 18:03:59'
### @21='管理员'
### @22='2019-11-06 21:53:00'
### @23=0
### @24=0
### @25='1'
### @26='00'
### SET
### @1='be2080a3-3815-48ee-b73e-2f18cbe3b4a8'
### @2=NULL
### @3='9790'
### @4=''
### @5='CE0EQ8000'
### @6='XQG52-Q718(灰)'
### @7=''
### @8=NULL
### @9='N500'
### @10='30'
### @11='T6'
### @12=''
### @13=1
### @14=''
### @15='在产'
### @16=''
### @17=''
### @18=''
### @19='管理员'
### @20='2018-08-31 18:03:59'
### @21='管理员'
### @22='2019-11-06 21:53:01'
### @23=0
### @24=0
### @25='1'
### @26='00'

MySQL · 工具 · mysqlbinlog

发表于 2019-11-07 | 更新于 2019-11-19 | 分类于 MySQL

简介

mysqlbinlog

使用

1
2
3
4
5
6
7
8
9
$ mysqlbinlog -vv --base64-output=decode-rows mysql-bin.xxx | head -1000 | more

--vv # 将二进制转换为可阅读文本
--base64-output=decode-rows # 解析binlog为sql
--start-position # 起始位置
--stop-position # 结束位置
--start-datetime # 起始时间
--stop-datetime # 结束时间
--no-defaults # 解决报错:unknown variable 'default-character-set=utf8'

MySQL · 案例分析 · 连接状态 init

发表于 2019-11-07 | 更新于 2019-11-15 | 分类于 MySQL

问题现象

HDM 监控告警

您的自建DB实例

cosmo-aps|cosmo-aps-t@10.138.232.84:3306 ( 别名: COSMOAPS_S, 集群: 智能制造 )

MySQL活跃会话数达到551

查看当前会话情况,发现出现大量的 State is init.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
+--------+-------------+---------------------+--------------------+---------+---------+----------------------------------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-------------+---------------------+--------------------+---------+---------+----------------------------------------+------------------------------------------------------------------------------------------------------+
| 34 | system user | | NULL | Connect | 4814602 | Queueing master event to the relay log | NULL |
| 312112 | sre | 10.138.232.84:39700 | information_schema | Query | 36129 | checking query cache for query | /* rds internal mark */ /* hdm internal mark */ /* rds internal mark */ /* hdm internal mark */ SHOW |
| 312113 | prom | 127.0.0.1:43690 | NULL | Query | 36131 | init | SHOW SLAVE STATUS |
| 312117 | prom | 127.0.0.1:43698 | NULL | Query | 36071 | init | SHOW SLAVE STATUS |
| 312120 | prom | 127.0.0.1:43704 | NULL | Query | 36011 | init | SHOW SLAVE STATUS |
| 312123 | prom | 127.0.0.1:43710 | NULL | Query | 35951 | init | SHOW SLAVE STATUS |
| 312126 | prom | 127.0.0.1:43716 | NULL | Query | 35891 | init | SHOW SLAVE STATUS |
| 312128 | prom | 127.0.0.1:43720 | NULL | Query | 35831 | init | SHOW SLAVE STATUS |
| 312131 | prom | 127.0.0.1:43726 | NULL | Query | 35771 | init | SHOW SLAVE STATUS |
| 312135 | prom | 127.0.0.1:43734 | NULL | Query | 35711 | init | SHOW SLAVE STATUS |
| 312138 | prom | 127.0.0.1:43740 | NULL | Query | 35651 | init | SHOW SLAVE STATUS |
| 312141 | prom | 127.0.0.1:43746 | NULL | Query | 35591 | init | SHOW SLAVE STATUS |
| 312143 | prom | 127.0.0.1:43750 | NULL | Query | 35531 | init | SHOW SLAVE STATUS |
| 312146 | prom | 127.0.0.1:43756 | NULL | Query | 35471 | init | SHOW SLAVE STATUS |
| 312149 | prom | 127.0.0.1:43762 | NULL | Query | 35411 | init | SHOW SLAVE STATUS |
| 312152 | prom | 127.0.0.1:43768 | NULL | Query | 35351 | init | SHOW SLAVE STATUS |
| 312155 | prom | 127.0.0.1:43774 | NULL | Query | 35291 | init | SHOW SLAVE STATUS |
| 312157 | prom | 127.0.0.1:43778 | NULL | Query | 35231 | init | SHOW SLAVE STATUS |
| 312160 | prom | 127.0.0.1:43784 | NULL | Query | 35171 | init | SHOW SLAVE STATUS |
| 312164 | prom | 127.0.0.1:43792 | NULL | Query | 35111 | init | SHOW SLAVE STATUS |
| 312167 | prom | 127.0.0.1:43798 | NULL | Query | 35051 | init | SHOW SLAVE STATUS |
| 312170 | prom | 127.0.0.1:43804 | NULL | Query | 34991 | init | SHOW SLAVE STATUS |
| 312172 | prom | 127.0.0.1:43808 | NULL | Query | 34931 | init | SHOW SLAVE STATUS |
| 312175 | prom | 127.0.0.1:43814 | NULL | Query | 34871 | init | SHOW SLAVE STATUS |
| 312178 | prom | 127.0.0.1:43820 | NULL | Query | 34811 | init | SHOW SLAVE STATUS |
| 312181 | prom | 127.0.0.1:43826 | NULL | Query | 34751 | init | SHOW SLAVE STATUS |
| 312184 | prom | 127.0.0.1:43832 | NULL | Query | 34691 | init | SHOW SLAVE STATUS |
| 312186 | prom | 127.0.0.1:43836 | NULL | Query | 34631 | init | SHOW SLAVE STATUS |
| 312189 | prom | 127.0.0.1:43842 | NULL | Query | 34571 | init | SHOW SLAVE STATUS |
| 312193 | prom | 127.0.0.1:43850 | NULL | Query | 34511 | init | SHOW SLAVE STATUS |
| 312196 | prom | 127.0.0.1:43856 | NULL | Query | 34451 | init | SHOW SLAVE STATUS |
| 312199 | prom | 127.0.0.1:43862 | NULL | Query | 34391 | init | SHOW SLAVE STATUS |
| 312201 | prom | 127.0.0.1:43866 | NULL | Query | 34331 | init | SHOW SLAVE STATUS |
| 312204 | prom | 127.0.0.1:43872 | NULL | Query | 34271 | init | SHOW SLAVE STATUS |
| 312207 | prom | 127.0.0.1:43878 | NULL | Query | 34211 | init | SHOW SLAVE STATUS |
| 312210 | prom | 127.0.0.1:43884 | NULL | Query | 34151 | init | SHOW SLAVE STATUS |
| 312213 | prom | 127.0.0.1:43890 | NULL | Query | 34091 | init | SHOW SLAVE STATUS |
| 312215 | prom | 127.0.0.1:43894 | NULL | Query | 34031 | init | SHOW SLAVE STATUS |
| 312218 | prom | 127.0.0.1:43900 | NULL | Query | 33971 | init | SHOW SLAVE STATUS |
| 312222 | prom | 127.0.0.1:43908 | NULL | Query | 33911 | init | SHOW SLAVE STATUS |
| 312225 | prom | 127.0.0.1:43914 | NULL | Query | 33851 | init | SHOW SLAVE STATUS |
| 312228 | prom | 127.0.0.1:43920 | NULL | Query | 33791 | init | SHOW SLAVE STATUS |
| 312230 | prom | 127.0.0.1:43924 | NULL | Query | 33731 | init | SHOW SLAVE STATUS |
| 312233 | prom | 127.0.0.1:43930 | NULL | Query | 33671 | init | SHOW SLAVE STATUS |
| 312236 | prom | 127.0.0.1:43936 | NULL | Query | 33611 | init | SHOW SLAVE STATUS |
| 312238 | prom | 127.0.0.1:43940 | NULL | Query | 33551 | init | SHOW SLAVE STATUS |
| 312241 | prom | 127.0.0.1:43946 | NULL | Query | 33491 | init | SHOW SLAVE STATUS |
| 312244 | prom | 127.0.0.1:43952 | NULL | Query | 33431 | init | SHOW SLAVE STATUS |
| 313865 | prom | 127.0.0.1:47194 | NULL | Query | 11 | init | SHOW SLAVE STATUS |
| 313866 | sre | localhost | NULL | Query | 0 | init | show processlist
+--------+-------------+---------------------+--------------------+---------+---------+----------------------------------------+------------------------------------------------------------------------------------------------------+

原因分析

从错误日志发现,2019-11-06 22:53:40 开始提醒磁盘空间不足

1
2
3
4
5
6
7
2019-11-06 22:53:40 5752 [Warning] Disk is full writing './relay-log.002275' (Errcode: 28 - No space left on device). Waiting for someone to free space...
2019-11-06 22:53:40 5752 [Warning] Retry in 60 secs. Message reprinted in 600 secs
2019-11-06 22:53:42 5752 [ERROR] Slave SQL: Could not execute Update_rows event on table cosmo-aps.bns_aps_versiontolineinfo; Error writing file '/data/mysql/tmp/MLpTCcJu' (Errcode: 28 - No space left on device), Error_code: 3; Error writing file 'mysql-bin' (errno: 28 - No space left on device), Error_code: 1026; handler error HA_ERR_RBR_LOGGING_FAILED; the event's master log mysql-bin.000528, end_log_pos 674303230, Error_code: 3
2019-11-06 22:53:42 5752 [Warning] Slave: Error writing file '/data/mysql/tmp/MLpTCcJu' (Errcode: 28 - No space left on device) Error_code: 3
2019-11-06 22:53:42 5752 [Warning] Slave: Error writing file 'mysql-bin' (errno: 28 - No space left on device) Error_code: 1026
2019-11-06 22:53:42 5752 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000528' position 661219322
2019-11-06 22:54:40 5752 [Warning] Disk is full writing './relay-log.002275' (Errcode: 28 - No space left on device). Waiting for someone to free space...

检查磁盘空间使用情况,发现 /data 目录已占满

1
2
3
4
5
6
7
8
9
10
11
12
[root@cosmoim-db04 log]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 100G 7.1G 93G 8% /
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 826M 63G 2% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda1 497M 172M 326M 35% /boot
/dev/mapper/centos-data 888G 888G 20K 100% /data
tmpfs 13G 12K 13G 1% /run/user/42
tmpfs 13G 0 13G 0% /run/user/1002
tmpfs 13G 0 13G 0% /run/user/0

/data 目录下磁盘占满的主要原因 Nov 6 14:44 出现主从复制中断导致 relay-log 疯狂增长

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@cosmoim-db04 data]# ll -h
total 798G
-rw-rw---- 1 mysql mysql 56 Sep 12 15:27 auto.cnf
drwxr-x--- 2 mysql mysql 8.0K Oct 31 18:48 cosmo@002daps
drwxr-x--- 2 mysql mysql 8.0K Oct 21 20:27 cosmo@002daps@002dt
-rw-r----- 1 mysql mysql 10G Nov 6 22:53 ibdata1
-rw-r----- 1 mysql mysql 10G Sep 12 14:13 ibdata2
-rw-r----- 1 mysql mysql 512M Nov 6 22:53 ib_logfile0
-rw-r----- 1 mysql mysql 512M Oct 28 15:47 ib_logfile1
-rw-r----- 1 mysql mysql 512M Nov 6 22:53 ib_logfile2
-rw-r----- 1 mysql mysql 12M Sep 12 14:13 ibtmp1
-rw-rw---- 1 mysql mysql 139 Nov 7 09:23 master.info
drwxr-x--- 2 mysql mysql 4.0K Sep 12 14:13 mysql
-rw-rw---- 1 mysql mysql 1.1G Oct 28 14:44 mysql-bin.000002
-rw-rw---- 1 mysql mysql 895M Nov 6 22:27 mysql-bin.000003
-rw-rw---- 1 mysql mysql 38 Oct 28 14:44 mysql-bin.index
-rw-rw---- 1 mysql mysql 5 Sep 12 15:27 mysql.pid
drwxr-x--- 2 mysql mysql 4.0K Sep 12 14:13 performance_schema
-rw-rw---- 1 mysql mysql 214 Oct 28 15:23 relay-log.000009
-rw-rw---- 1 mysql mysql 1.1G Nov 6 14:44 relay-log.000010
-rw-rw---- 1 mysql mysql 4.4M Nov 6 14:44 relay-log.000011
-rw-rw---- 1 mysql mysql 214 Nov 6 14:44 relay-log.000012
-rw-rw---- 1 mysql mysql 1.1G Nov 6 14:45 relay-log.000013
-rw-rw---- 1 mysql mysql 17M Nov 6 14:45 relay-log.000014
-rw-rw---- 1 mysql mysql 214 Nov 6 14:45 relay-log.000015
-rw-rw---- 1 mysql mysql 1.1G Nov 6 14:45 relay-log.000016
-rw-rw---- 1 mysql mysql 17M Nov 6 14:45 relay-log.000017
-rw-rw---- 1 mysql mysql 214 Nov 6 14:45 relay-log.000018
-rw-rw---- 1 mysql mysql 1.1G Nov 6 14:46 relay-log.000019
-rw-rw---- 1 mysql mysql 17M Nov 6 14:46 relay-log.000020
-rw-rw---- 1 mysql mysql 214 Nov 6 14:46 relay-log.000021
....

释放部分磁盘空间后,连接会话恢复正常

1
2
3
4
5
6
7
8
9
mysql> show processlist;
+--------+-------------+---------------------+--------------------+---------+---------+----------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-------------+---------------------+--------------------+---------+---------+----------------------------------+------------------+
| 34 | system user | | NULL | Connect | 4816502 | Waiting for master to send event | NULL |
| 313974 | sre | 10.138.232.84:43874 | information_schema | Sleep | 7 | | NULL |
| 313976 | sre | localhost | NULL | Query | 0 | init | show processlist |
+--------+-------------+---------------------+--------------------+---------+---------+----------------------------------+------------------+
3 rows in set (0.00 sec)

工具

发表于 2019-11-06 | 分类于 其他

htop

简介:top 是 Linux 下常用的监控程序,htop 相当于其加强版,颜色显示不同参数,且支持鼠标操作,更加简单和人性化。

安装:

1
2
3
$ git clone https://github.com/hishamhm/htop.git
$ ./autogen.sh && ./configure && make
$ make install

使用:

mycli

简介:mycli 是用于 MySQL、MariaDB 和 Percona 的命令行界面,具有自动补全和语法高亮功能。

安装:

1
2
$ yum install python-pip
$ pip install mycli

使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$ mycli --help
Usage: mycli [OPTIONS] [DATABASE]

A MySQL terminal client with auto-completion and syntax highlighting.

Examples:
- mycli my_database
- mycli -u my_user -h my_host.com my_database
- mycli mysql://my_user@my_host.com:3306/my_database

Options:
-h, --host TEXT Host address of the database.
-P, --port INTEGER Port number to use for connection. Honors
$MYSQL_TCP_PORT.
-u, --user TEXT User name to connect to the database.
-S, --socket TEXT The socket file to use for connection.
-p, --password TEXT Password to connect to the database.
--pass TEXT Password to connect to the database.
--ssl-ca PATH CA file in PEM format.
--ssl-capath TEXT CA directory.
--ssl-cert PATH X509 cert in PEM format.
--ssl-key PATH X509 key in PEM format.
--ssl-cipher TEXT SSL cipher to use.
--ssl-verify-server-cert Verify server's "Common Name" in its cert
against hostname used when connecting. This
option is disabled by default.
-V, --version Output mycli's version.
-v, --verbose Verbose output.
-D, --database TEXT Database to use.
-d, --dsn TEXT Use DSN configured into the [alias_dsn]
section of myclirc file.
--list-dsn list of DSN configured into the [alias_dsn]
section of myclirc file.
-R, --prompt TEXT Prompt format (Default: "\t \u@\h:\d> ").
-l, --logfile FILENAME Log every query and its results to a file.
--defaults-group-suffix TEXT Read MySQL config groups with the specified
suffix.
--defaults-file PATH Only read MySQL options from the given file.
--myclirc PATH Location of myclirc file.
--auto-vertical-output Automatically switch to vertical output mode
if the result is wider than the terminal
width.
-t, --table Display batch output in table format.
--csv Display batch output in CSV format.
--warn / --no-warn Warn before running a destructive query.
--local-infile BOOLEAN Enable/disable LOAD DATA LOCAL INFILE.
--login-path TEXT Read this path from the login file.
-e, --execute TEXT Execute command and quit.
--help Show this message and exit.

shortcut

1
2
3
4
5
# 快捷键
向下翻页:Ctrl + f
向上翻页:Ctrl + b
磁盘文件排序:du -h * | sort -n
删除单行:dd

crontab

简介:用来定期执行程序的命令。

使用:在线工具

typora

简介:Markdown 是一种轻量级标记语言,人们使用易读易写的纯文本格式编写文档,然后转换成有效的 html 文档,Typora 对 Markdown 的完美支持、丰富的主题、高效的快捷键操作,无一不令人爱不释手。

安装:下载

使用:

1
2
3
4
5
6
7
8
9
加粗: Ctrl/Cmd + B
标题: Ctrl/Cmd + H
插入链接: Ctrl/Cmd + K
插入代码: Ctrl/Cmd + Shift + C
行内代码: Ctrl/Cmd + Shift + K
插入图片: Ctrl/Cmd + Shift + I
无序列表: Ctrl/Cmd + Shift + L
撤销: Ctrl/Cmd + Z
一级标题:Crtl + 1

zentao

简介:禅道,国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug 管理、缺陷管理、用例管理、计划发布等功能,实现了软件的完整生命周期管理。

使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
$ wget http://dl.cnezsoft.com/zentao/11.5.1/ZenTaoPMS.11.5.1.zbox_64.tar.gz
$ tar -zxvf ZenTaoPMS.11.5.1.zbox_64.tar.gz -C /opt
$ /opt/zbox/zbox start
$ /opt/zbox/zbox -ap 8080 -mp 3307 (-ap:修改Apache端口,-mp:修改MySQL端口)

# 启停httpd
./httpd -k start
./httpd -k stop

# 地址
http://10.133.0.53:8080

# 账号
admin/Haier@123

mindoc

官方网站 | 项目地址 | 安装参考

MySQL · 连接

发表于 2019-11-06 | 更新于 2020-03-21 | 分类于 MySQL

Linux

连接 MySQL 操作是一个连接进程和 MySQL 数据库实例进行通信。从程序设计的角度来说,本质上是进程间通信。常用的进程通信方式有:管道、命名管道、命名字、TCP/IP 套接字、UNIX 域套接字。

  • TCP/IP 套接字方式

这种方式是 MySQL 数据库在任何平台下都提供的连接方式,也是网络请求中使用的最多的一种方式。这种方式在 TCP/IP 连接上建立一个基于网络的连接请求,一般情况下客户端和服务端不在同一台服务器上。需要注意的是,在通过 TCP/IP 连接到 MySQL 实例时,MySQL 数据库会先检查一张权限视图,用来判断发起请求的客户端 IP 是否允许连接到 MySQL 实例,该视图为 mysql.user。

1
2
3
4
5
6
7
$ mysql -h IP -u username -p password -P port

[options]
-u, --user=name # 指定用户名
-p, --password[=name] # 指定密码
-h, --host=name # 指定服务器IP
-P, --port # 指定连接端口
  • UNIX 域套接字方式

UNIX 域套接字其实不是一个网络协议,所以只能在 MySQL 客户端和数据库实例在一台服务器上的情况下使用。用户可以在配置文件中指定套接字文件的路径,如:socket = /tmp/mysql.sock。

1
2
3
4
5
6
[client]
port = 3306
socket = /data/mysql/mysql.sock
default-character-set = utf8mb4

$ mysql -S /data/mysql/mysql.sock -u username

客户端工具

  • Windows 客户端工具:Navicate、SQLyog、HeidiSQL、phpMyAdmin、MySQL Workbench 等。
  • Mac 客户端工具:Selquel Pro、MySQL Workbench 等。

MySQL · 最佳实践 · 快速杀掉大量会话连接

发表于 2019-11-06 | 更新于 2019-11-15 | 分类于 MySQL

kill.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# !/bin/sh

#############################################################################
# Kill all processlist According to status.
# -h: 主机IP
# -u: 用户名
# -p: 密码
#############################################################################

host = ''
user = ''
pwd = ''
status = ''

while :
do
n=`mysqladmin processlist -h$host -u$user -p$pwd | grep -i $status | wc -l`
date=`date +%Y%m%d\[%H:%M:%S]`
echo $n

if [ "$n" -gt 10 ]
then
for i in `mysqladmin processlist -h$host -u$user -p$pwd | grep -i $status | awk '{print $2}'`
do
mysqladmin processlist -h$host -u$user -p$pwd kill $i
done

echo "$status is too many need killed it " >> /tmp/kill.log
echo "$date : $n" >> /tmp/kill.log
fi
sleep 1
done
1…678…18
Hui Rao

Hui Rao

最好的成长是分享
173 日志
19 分类
14 标签
GitHub E-Mail
© 2021 Hui Rao
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v7.1.0
|