Linux 服务器端口不可访问问题排查

问题描述

项目中使用的服务器是物理机,使用 centos 7.6 版本的操作系统, 4 个千兆网口,上架时间 23 年 8 月份。部署在内网机房,并且在内网机房分配的固定IP 是 172.87.7.249,并在机器上部署了 docker,

阅读更多

Linux nohup 命令

nohup 表示不挂断地运行命令,是 no hangup 的缩写,语法格式如下:

1
nohup Command [ Arg ... ] [ & ]
  • nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。
  • nohup放在命令的开头,表示不挂起(no hang up),也即,关闭终端或者退出某个账号,进程也继续保持运行状态,一般配合&符号一起使用。如 nohup command &。
阅读更多

Linux 中的 namespace

基本介绍

namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。

Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。

阅读更多

yum 指令

yum(Yellowdog Updater Modified):是一个基于 RPM 的软件包管理器,能够从指定服务器自动下载RPM包并且安装,可以处理软件之间的依赖关系,一次性安装所有依赖的软件包,无需一个个下载安装。

工作原理示意图

yum 客户端及服务器的工作原理如下图所示

阅读更多

Linux Top 命令指南

top 命令允许用户监视 Linux 上的进程和系统资源使用情况,它是系统管理员工具箱中最有用的工具之一,并且在每个发行版中都预装了它。与 ps 等其他命令不同,它是交互式的,我们可以浏览进程列表、终止进程,等等。本文中,我们将了解如何使用 top 命令。

阅读更多

Linux 下安装 Mysql 数据库

更新,Centos 7 离线安装 Mysql 5.7

近期的一个项目,需要使用 MySQL 5.7,但是甲方所提供的机器是不能访问外网环境的,所以只能通过离线安装的方式来搞,这里大概记录一下,备忘。

选择 Linux - Generic -> Compressed TAR Archive:(mysql-5.7.18-linux-glibc2.12-x86_64.tar.gz),版本按需下载即可;下面是具体的安装过程。

安装步骤

查询并卸载系统自带的数据库 Mariadb

1
2
3
rpm -qa | grep mariadb
## 如果有的话,返回的是这种: mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps

创建用户和用户组

为了数据库管理,对于安装的 MySQL 数据库,生产上我们都会建立一个 mysql用户和mysql用户组。

1
2
3
4
5
6
7
8
9
# 先检查mysql用户和用户组有没有被使用
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
# 添加 mysql 用户组
groupadd mysql
# 添加mysql用户并加入用户组
useradd -g mysql mysql
# 修改mysql用户的登陆密码(这里根据需要设置,可以略过)
passwd mysql

文件上传

如果甲方提供了 访问 VPN ,那么则通过 VPN 建立连接;或者通过甲方提供的方式将文件上传到指定的机器上

1
2
3
4
5
6
7
8
# 解压安装包,解压后会有一个mysql-5.7.18-linux-glibc2.12-x86_64.tar.gz包
tar -xvf mysql-5.7.18-linux-glibc2.5-x86_64.tar
# 解压 mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz包
tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
# 此时会生成一个目录 mysql-5.7.18-linux-glibc2.5-x86_64,将其改名为 mysql
mv mysql-5.7.18-linux-glibc2.5-x86_64 mysql
# 将 mysql 移到 /usr/local/mysql
mv mysql /usr/local/

授权

按照下面的操作执行

1
2
3
4
5
6
7
cd /usr/local/
chown -R mysql mysql/
chgrp -R mysql mysql/
cd mysql/
# 创建 data 目录 /usr/local/mysql/data
mkdir data
chown -R mysql:mysql data

配置文件的创建和配置信息

默认这个配置文件是不存在的,需要创建,并且填入配置信息;在 /usr/local/mysql/ 目录下创建文件并编辑

1
2
cd /usr/local/mysql/
vi my.cnf

具体配置信息大致如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mysql]
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8

[mysqld]
socket=/var/lib/mysql/mysql.sock
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=32M
explicit_defaults_for_timestamp=true
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysql.server]
user=mysql
basedir=/usr/local/mysql

安装数据库

进入 /usr/local/mysql/ 目录下,执行安装操作。

1
2
# 执行安装命令
bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

安装后,如下信息表示安装成功

2023-03-23 14:32:16 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld –initialize
2023-03-23 14:32:20 [WARNING] The bootstrap log isn’t empty:
2023-03-23 14:32:20 [WARNING] 2023-03-23T06:32:16.437877Z 0 [Warning] –bootstrap is deprecated. Please consider using –initialize instead
2023-03-23T06:32:16.438432Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2023-03-23T06:32:16.438439Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)

安装成功后设置文件及目录权限:

1
2
3
4
# 在 /usr/local/mysql 目录下执行
cp ./support-files/mysql.server /etc/init.d/mysqld
chown 777 my.cnf
chmod +x /etc/init.d/mysqld

启动 mysql

/etc/init.d/mysqld restart

我的机器上是出现了如下的报错

1
2
3
4
 ERROR! MySQL server PID file could not be found!
Starting MySQL.Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
2023-03-23T06:33:05.379438Z mysqld_safe Directory '/var/lib/mysql' for UNIX socket file don't exists.
ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).

如果 /usr/local/mysql/data/localhost.localdomain.err 这个文件存在,就进去看一下具体原因,如果没有就按照以下步骤执行。

1
2
3
4
5
# 创建 /var/lib/mysql/
cd /var/lib/
mkdir mysql
# 提供读写的权限
chmod 777 /var/lib/mysql

配置环境变量,在配置文件中 export PATH=$PATH:/usr/local/mysql/bin

1
2
3
4
# 修改配置文件 /etc/profile
vi /etc/profile
# 立即生效
source /etc/profile

然后重新启动即可。

获取 mysql 安装后的初始密码

1
2
3
4
[root@localhost mysql]# cat /root/.mysql_secret
# Password set for user 'root@localhost' at 2023-03-23 14:32:16
# 这个就是对应的初始密码,随机生成的
cHx#-%,zRho!

登录 mysql 遇到的问题

1
2
3
mysql -uroot -p
# 此时输入密码后可能出现下面的问题
Can't connect to local MySQL server through socket '/tmp/mysql.sock'

解决方案:
1、首先保证在 my.cnf 文件中 socket 的配置如下:

1
2
3
4
...
[mysqld]
socket = /var/lib/mysql/mysql.sock
...

2、对 /tmp/mysql.sock 和 /var/lib/mysql/mysql.sock 建立软连接

1
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

修改密码

1
2
3
# 执行语句如下
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your password';
flush privileges;

添加远程访问权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 切换到 mysql 数据库
use mysql;
# 更新权限
update user set host='%' where user = 'root';
#查询一下是否修改成功
select host,user from user;
# 结果如下表示成功,root用户的host已经修改为'%'
--+-----------+---------------+
--| host | user |
--+-----------+---------------+
--| % | root |
--| localhost | mysql.session |
--| localhost | mysql.sys |
--+-----------+---------------+
# 上面的修改结束后,退出数据库,重启数据库服务生效
/etc/init.d/mysqld restart

设置开机自启动服务

1
2
3
4
5
6
# 将mysqld服务加入到系统服务
chkconfig --level 35 mysqld on
# 检查mysqld服务是否已经生效
chkconfig --list mysqld
# 增加mysqld服务控制脚本执行权限
chmod +x /etc/init.d/mysqld

此时如果通过 远程访问还是访问不通,则可能是因为防火墙的问题;这里有两种解决办法

  • 直接关闭防火墙
    1
    systemctl stop firewalld
  • 开通防火墙,放开对 3306 的拦截
    1
    firewalld-cmd --zone=public --add-port=3306/tcp --permanent

Centos 7 在线安装 Mysql 5.7

最近在搞 Apollo ,熟悉的同学应该知道,Apollo 需要依赖 Mysql。本以为很容易搞定,但是却踩了一路坑,眼高手低,也参考了网上很多博客,果然是残缺就是美!本篇就简单记录一下这个过程,以便后面参考。

环境

| 软件 | 版本|
| ———— | ———— |
|linux | centOS 7|
| jdk | 8 |
| mysql| 5.7.24 |

阅读更多

Linux 下安装 Zookeeper

安装 Zookeeper

目前 Curator 有 2.x.x 和 3.x.x 两个系列的版本,支持不同版本的 Zookeeper。其中 Curator 2.x.x 兼容 Zookeeper的 3.4.x 和 3.5.x。而 Curator 3.x.x 只兼容 Zookeeper 3.5.x。

Curator 2.x.x - compatible with both ZooKeeper 3.4.x and ZooKeeper 3.5.x
Curator 3.x.x - compatible only with ZooKeeper 3.5.x and includes support for new

阅读更多

linux shell 编程小记

if 条件 OPTION

OPTION 解释
[-a file] 如果file存在则为真 ,也可以表示为 and: 条件与
if [ -z “condition1” -a -z “condition2” ]
[-b file] 如果file存在且是一个特殊文件则为真
[-c file] 如果file存在且是一个特殊文件则为真
[-d file] 如果 file 文件存在且是一个目录则为真,d前的!是逻辑非 
#表示目录不存在,则执行后面的 then 操作 
if [ ! -d lcd_path/par_date ]
[-e file] 如果 file文件存在则为真
[-f file] 如果 file 存在且是一个普通文件则为真
[-g file] 如果 file 存在且已经设置了SGID则为真(SUID 是 Set User ID, SGID 是 Set Group ID的意思)
[-h file] 如果 file 存在且是一个符号连接则为真
[-k file] 如果 file 存在且已经设置粘制位则为真
[-p file] 如果file存在且是一个名字管道(F如果O)则为真。管道是linux里面进程间通信的一种方式,
其他的还有像信号(signal)、信号量、消息队列、共享内存、套接字(socket)等
[-r file] 如果file存在且是可读的则为真
[-s file] 如果file存在且大小不为0则为真
[-t FD] 如果文件描述符FD打开且指向一个终端则为真
[-u file] 如果file存在且设置了SUID(set userID)则为真
[-w file 如果file存在且是可写的则为真
[-x file] 如果file存在且是可执行的则为真
[-O file] 如果file存在且属有效用户ID则为真
[-G file] 如果file存在且属有效用户组则为真
[-L file] 如果file存在且是一个符号连接则为真
[-N file] 如果file存在and has been mod如果ied since it was last read则为真
[-S file] 如果file存在且是一个套接字则为真
[-o optionname] 如果shell选项“optionname”开启则为真
[-z string] “string”的长度为零则为真
[-n string] or [string] “string”的长度为非零non-zero则为真
阅读更多