程序员@老李 - Linux https://blog.mostion.com/category/linux/ zh-CN Tue, 17 Jun 2025 13:42:00 +0800 Tue, 17 Jun 2025 13:42:00 +0800 Rocky Linux 8 中禁用 IPv6 并仅启用 IPv4 https://blog.mostion.com/archives/56/ https://blog.mostion.com/archives/56/ Tue, 17 Jun 2025 13:42:00 +0800 Jason 在 Rocky Linux 8 中禁用 IPv6 并仅启用 IPv4,可以通过以下步骤完成(推荐使用 nmcli 或直接修改内核参数):


方法 1:通过 nmcli 禁用 IPv6(临时生效,重启后保留)

1. 查看当前网络连接名称

nmcli connection show

输出示例(假设连接名为 ens192):

NAME    UUID                                  TYPE      DEVICE
ens192  518fd4a1-xxxx-xxxx-xxxx-xxxxxxxxxxxx  ethernet  ens192

2. 禁用 IPv6 并仅启用 IPv4

nmcli connection modify ens192 ipv6.method "disabled"
nmcli connection up ens192  # 重新激活连接

方法 2:修改网络配置文件(永久生效)

1. 编辑网卡配置文件

vi /etc/sysconfig/network-scripts/ifcfg-ens192

在文件中添加或修改以下参数:

IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no

2. 重启网络服务

systemctl restart NetworkManager

方法 3:通过内核参数禁用 IPv6(全局禁用)

1. 修改 GRUB 配置

vi /etc/default/grub

GRUB_CMDLINE_LINUX 行添加 ipv6.disable=1

GRUB_CMDLINE_LINUX="... ipv6.disable=1"

2. 重新生成 GRUB 配置

grub2-mkconfig -o /boot/grub2/grub.cfg

3. 重启系统

reboot

验证 IPv6 是否已禁用

# 检查网卡是否无 IPv6 地址
ip a | grep inet6
# 应无输出

# 验证内核参数
cat /proc/cmdline | grep ipv6.disable
# 应显示 `ipv6.disable=1`(如果使用方法3)

恢复 IPv6(如需启用)

1. 恢复 nmcli 配置

nmcli connection modify ens192 ipv6.method "auto"
nmcli connection up ens192

2. 删除内核参数

编辑 /etc/default/grub 移除 ipv6.disable=1,重新生成 GRUB 并重启。


注意事项

  1. 优先级

    • 方法 1/2 仅针对特定网卡,方法 3 是全局禁用。
    • 生产环境中建议优先使用方法 1 或 2,避免影响其他服务。
  2. 兼容性

    • 某些应用程序(如 Docker、Kubernetes)可能依赖 IPv6,禁用前需测试。
  3. 防火墙

    • 如果使用 firewalld,IPv6 规则会自动失效,无需额外操作。
通过上述步骤,系统将仅使用 IPv4 通信。
]]>
0 https://blog.mostion.com/archives/56/#comments https://blog.mostion.com/feed/category/linux/
MySQL 8 禁用表名大小写敏感 https://blog.mostion.com/archives/55/ https://blog.mostion.com/archives/55/ Tue, 17 Jun 2025 13:41:52 +0800 Jason 在 Rocky Linux 8 上使用 yum(或 dnf)安装 MySQL 8 后,如果需要 禁用表名大小写敏感(即强制表名存储为小写),需修改配置文件并重新初始化数据目录。以下是具体步骤:


步骤 1:修改 MySQL 配置文件

1. 编辑 MySQL 配置文件(默认路径):

vi /etc/my.cnf

或(如果存在):

vi /etc/my.cnf.d/mysql-server.cnf

2. 在 [mysqld] 段落下添加以下参数:

[mysqld]
lower_case_table_names=1

参数说明

  • lower_case_table_names=1:表名存储为小写,比较时不区分大小写。
  • 注意:MySQL 8 仅在初始化时允许修改此参数,后续更改需重新初始化数据目录!

步骤 2:停止 MySQL 服务

systemctl stop mysqld

步骤 3:删除原有数据目录(谨慎操作!)

rm -rf /var/lib/mysql/*
此操作会删除所有数据库数据,确保已备份重要数据!

步骤 4:重新初始化 MySQL 数据目录

mysqld --initialize --user=mysql --lower-case-table-names=1

关键点:

  • --initialize:初始化数据目录。
  • --user=mysql:指定运行用户。
  • --lower-case-table-names=1:确保初始化时应用配置。

步骤 5:启动 MySQL 服务

systemctl start mysqld

步骤 6:验证配置

1. 登录 MySQL:

mysql -u root -p

(输入初始化时生成的临时密码,可通过 grep 'temporary password' /var/log/mysqld.log 查看)

2. 检查参数是否生效:

SHOW VARIABLES LIKE 'lower_case_table_names';

输出应为:

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 1     |
+------------------------+-------+

常见问题解决

1. 初始化报错 --lower-case-table-names=1 无效

  • 原因:MySQL 8 要求此参数必须在首次初始化时设置,且不能后续修改。
  • 解决:确保数据目录 /var/lib/mysql/ 为空,重新执行初始化命令。

2. 表名仍区分大小写

  • 原因:可能未正确删除旧数据目录或配置文件未生效。
  • 检查

    cat /var/lib/mysql/auto.cnf | grep lower_case_table_names

    如果存在旧配置,需彻底清理数据目录。

3. 权限问题

若启动失败,检查日志:

journalctl -u mysqld

修复权限:

chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql

总结

  • 关键步骤:修改配置文件 → 删除数据目录 → 重新初始化。
  • 仅限新装:此方法适用于首次安装或可接受数据丢失的情况。
  • 生产环境:建议在测试环境验证后再操作,避免数据风险。
⚠️ 注意:MySQL 8 默认不允许在初始化后修改 lower_case_table_names,因此必须通过重新初始化实现。
]]>
0 https://blog.mostion.com/archives/55/#comments https://blog.mostion.com/feed/category/linux/
解决 Elasticsearch 不能以 root 用户运行的问题 https://blog.mostion.com/archives/54/ https://blog.mostion.com/archives/54/ Tue, 17 Jun 2025 13:39:00 +0800 Jason Elasticsearch 从 5.0 版本开始出于安全考虑,默认不允许以 root 用户运行。以下是解决这个问题的几种方法:

方法一:创建专用用户运行 Elasticsearch(推荐)

这是最安全和推荐的做法:

  1. 创建 elasticsearch 用户和组:

    groupadd elasticsearch
    useradd -g elasticsearch elasticsearch
  2. 更改 Elasticsearch 目录权限:

    chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/
    chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
    chown -R elasticsearch:elasticsearch /var/log/elasticsearch/
  3. 以 elasticsearch 用户启动:

    sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch

方法二:修改系统配置允许以 root 运行(不推荐)

如果确实需要以 root 运行(仅用于测试环境):

  1. 编辑 Elasticsearch 配置文件:

    vim /etc/elasticsearch/jvm.options
  2. 添加以下 JVM 参数:

    -Des.insecure.allow.root=true
  3. 或者修改启动脚本:

    vim /usr/share/elasticsearch/bin/elasticsearch

    在文件开头添加:

    ES_JAVA_OPTS="-Des.insecure.allow.root=true"
    export ES_JAVA_OPTS

方法三:使用 systemd 服务(生产环境推荐)

  1. 创建 systemd 服务文件:

    vim /etc/systemd/system/elasticsearch.service
  2. 添加以下内容:

    [Unit]
    Description=Elasticsearch
    After=network.target
    
    [Service]
    User=elasticsearch
    Group=elasticsearch
    ExecStart=/usr/share/elasticsearch/bin/elasticsearch
    Restart=always
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
  3. 启用并启动服务:

    systemctl daemon-reload
    systemctl enable elasticsearch
    systemctl start elasticsearch

方法四:使用 Docker 运行

如果你使用 Docker,可以这样运行:

docker run -d --name elasticsearch \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  docker.elastic.co/elasticsearch/elasticsearch:7.9.2

注意事项

  1. 安全警告:在生产环境中以 root 运行 Elasticsearch 有严重安全风险
  2. 文件权限:确保数据目录、日志目录和配置文件有正确的权限
  3. SELinux:如果启用了 SELinux,可能需要额外配置
  4. ulimit:可能需要增加文件描述符限制:

    ulimit -n 65536

通过创建专用用户运行 Elasticsearch 是最佳实践,既能满足安全要求,又能保证服务正常运行。

]]>
0 https://blog.mostion.com/archives/54/#comments https://blog.mostion.com/feed/category/linux/