华为云用户手册

  • 逻辑订阅完整使用示例 发布端创建表 create table tableName(id int primary key, num int); 发布端创建发布 create publication pubName for table tableName; 发布端创建一个Failover Slot(若为PostgreSQL12或13版本,则去掉第四个参数false) SELECT * FROM pg_create_logical_replication_slot('slotname', 'pgoutput', false, false, true); 发布端插入数据 insert into tableName values(1,1); insert into tableName values(2,2); 订阅端创建表 create table tableName (id int primary key, num int); 订阅端创建订阅,指定创建的Failover Slot名称 create subscription subName connection 'host=192.168.0.10 dbname=postgres user=root port=5432 password=xxxxxxx' publication pubName with(copy_data=true,create_slot=false,slot_name= slotname); 订阅端查询数据,验证数据是否订阅到 select * from tableName; 主备切换 发布端继续插入数据,在订阅端查看,逻辑订阅不会断开。
  • 使用场景 RDS for PostgreSQL的逻辑订阅故障转移(Failover Slot)功能用来将那些指定为failover slot的逻辑复制槽信息从主实例同步到备实例,当主备切换之后逻辑订阅能够继续进行,实现逻辑复制槽的故障转移。 当用户使用逻辑复制时,由于slot信息不会随着主备切换转移到新的主实例上,一旦实例发生主备切换,逻辑订阅就会断开,此时除非手动重新创建slot,否则逻辑订阅无法重新连接。RDS for PostgreSQL的Failover Slot功能可以将所有的logical slot从主实例同步到备实例,避免主备切换后逻辑订阅断开。
  • 使用方法 在发布端执行如下SQL,创建一个Failover Slot: 表1 命令及参数说明 版本 命令 参数说明 PostgreSQL12和PostgreSQL13版本 SELECT * FROM pg_create_logical_replication_slot('slotname', 'pgoutput', false, true); slotname表示logical slot的名称。 pgoutput表示plugin的名称,也可以更改为其他支持的插件。 第三个参数(例如false),表示该slot是否为临时slot。 第四个参数(例如true),表示该slot是否为Failover Slot。 PostgreSQL14及以上版本 SELECT * FROM pg_create_logical_replication_slot('slotname', 'pgoutput', false, false, true); slotname表示logical slot的名称。 pgoutput表示plugin的名称,也可以更改为其他支持的插件。 第三个参数(例如false),表示该slot是否为临时slot。 第四个参数(例如true),表示是否启动两阶段提交选项。 第五个参数(例如true),表示该复制槽是否为Failover slot。 因此,如果要创建一个Failover Slot,在第三个参数临时slot字段必须为false,最后一个参数必须为true。如果最后一个参数省略不写,则创建的是非Failover Slot。
  • 支持的RDS for MySQL版本 建议您使用最新小版本的实例在线扩展varchar类型字段。更多操作,详见升级内核小版本。 表1 在线扩展varchar类型字段支持的版本 varchar类型字段长度 RDS for MySQL 5.6 RDS for MySQL 5.7 RDS for MySQL 8.0 长度小于256字节 不支持 支持 支持 长度跨越256字节长度 支持 支持 不支持 长度大于256字节 不支持 支持 支持
  • MDL锁视图详解 MDL锁视图以系统表的形式呈现,该表位于“information_schema”下,表名称是“metadata_lock_info”。表结构如下所示。 desc information_schema.metadata_lock_info;+---------------+-----------------------+---------+------+----------+--------|| Field | Type | Null |Key |Default | Extra |+---------------+-----------------------+---------+------+----------+--------|| THREAD_ID | bigint(20) unsigned | NO | | 0 | || LOCK_STATUS | varchar(24) | NO | | | || LOCK_MODE | varchar(24) | YES | | NULL | || LOCK_TYPE | varchar(30) | YES | | NULL | || LOCK_DURATION | varchar(30) | YES | | NULL | || TABLE_SCHEMA | varchar(64) | YES | | NULL | || TABLE_NAME | varchar(64) | YES | | NULL | |+---------------+-----------------------+---------+------+----------+--------| 表1 metadata_lock_info字段 序号 字段名 字段定义 字段说明 0 THREAD_ID bigint(20) unsigned 会话ID。 1 LOCK_STATUS varchar(24) MDL锁的两种状态。 PENDING:表示会话正在等待该MDL锁。 GRANTED:表示会话已获得该MDL锁。 2 LOCK_MODE varchar(24) 加锁的模式,如MDL_SHARED 、MDL_EXCLUSIVE 、MDL_SHARED_READ、MDL_SHARED_WRITE等。 3 LOCK_TYPE varchar(30) MDL锁的类型,如Table metadata lock、Schema metadata lock、Global read lock、Tablespace lock等。 4 LOCK_DURATION varchar(30) MDL锁范围,取值如下: MDL_STATEMENT:表示语句级别。 MDL_TRANSACTION:表示事务级别。 MDL_EXPLICIT:表示GLOBAL级别。 5 TABLE_SCHEMA varchar(64) 数据库名,对于部分GLOBAL级别的MDL锁,该值为空。 6 TABLE_NAME varchar(64) 表名,对于部分GLOBAL级别的MDL锁,该值为空。
  • MDL锁视图案例分析 问题描述 用户发现对表t2执行truncate操作一直被阻塞后,业务流程中对表t2执行查询操作也全部被阻塞。 排查分析 无MDL锁视图 当发现DDL语句被阻塞后,执行show processlist查看线程信息,结果如下所示。 show processlist;+------+--------+--------------+--------+-----------+----------+-----------------------------------|-------------------------|| Id | User | Host | db | Command | Time | State |Info |+---------------+-----------------------+-----------+----------+-----------------------------------+-------------------------|| 2 | root | localhost | test | Sleep | 73 | | Null || 3 | root | localhost | test | Sleep | 63 | | Null || 4 | root | localhost | Null | Query | 35 | Waiting for table metadata lock | truncate table test.t2 || 5 | root | localhost | test | Query | 17 | Waiting for table metadata lock | select * from test.t2 || 6 | root | localhost | test | Query | 0 | starting | show processlist |+------+--------+--------------+--------+-----------+----------+-----------------------------------|-------------------------| 上述线程列表信息显示: ID=4的会话执行truncate操作时被其他会话持有的table metadata lock阻塞。 ID=5的会话执行查询操作时同样被阻塞。 无法确定哪个会话阻塞了ID=4的会话和ID=5的会话。 此时,如果随机KILL其他会话会给线上业务带来很大风险,因此只能等待其他会话释放该MDL锁。 使用MDL锁视图 执行select * from information_schema.metadata_lock_info查看元数据锁信息,结果如下所示。 select * from information_schema.metadata_lock_info;+-------------+-------------+--------------------------+----------------------+-------------------+----------------+----------------+| THREAD_ID | LOCK_STATUS | LOCK_MODE | LOCK_TYPE | LOCK_DURATION | TABLE_SCHEMA | TABLE_NAME |+-------------+-------------+--------------------------+----------------------+-------------------+----------------+----------------+| 2 | GRANTED | MDL_SHARED_READ | Table metadata lock | MDL_TRANSACTION | test | t1 || 3 | GRANTED | MDL_SHARED_READ | Table metadata lock | MDL_TRANSACTION | test | t2 || 4 | GRANTED | MDL_INTENTION_EXCLUSIVE | Global read lock | MDL_STATEMENT | | || 4 | GRANTED | MDL_INTENTION_EXCLUSIVE | Schema metadata lock | MDL_TRANSACTION | test | || 4 | PENDING | MDL_EXCLUSIVE | Table metadata lock | | test | t2 || 5 | PENDING | MDL_SHARED_READ | Table metadata lock | | test | t2 |+-------------+-------------+--------------------------+----------------------+-------------------+----------------+----------------+ 结合show processlist的结果,从元数据锁视图中可以明显看出: 上述线程信息和元数据锁视图信息显示: THREAD_ID=4的会话正在等待表t2的metadata lock。 THREAD_ID=3的会话持有表t2的metadata lock,该MDL锁为事务级别,因此只要THREAD_ID=3的会话的事务不提交,THREAD_ID=4的会话将会一直阻塞。 因此,用户只需在THREAD_ID=3的会话中执行命令commit或终止THREAD_ID=3的会话,便可以让业务继续运行。
  • MDL锁视图使用示例 使用场景:长时间未提交事务,阻塞DDL,继而阻塞所有同表的操作。 表2 MDL锁视图示例 表名 会话 session2 session3 session4 session5 t1 begin; select * from t1; - - - t2 - begin; select * from t2; - - t3 - - truncate table t2; (blocked) - t4 - - - begin; select * from t2; (blocked)
  • 扩展分类 长度小于256字节的varchar类型字段的在线扩展 create table t1(a varchar(10));Query OK, 0 rows affected (0.03 sec) alter table t1 modify a varchar(100),ALGORITHM=INPLACE, LOCK=NONE;Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warning: 0 长度跨越256字节长度的varchar类型字段的在线扩展 create table t1(a varchar(100));Query OK, 0 rows affected (0.05 sec) alter table t1 modify a varchar(300),ALGORITHM=INPLACE, LOCK=NONE;Query OK, 0 rows affected (0.11 sec)Records: 0 Duplicates: 0 Warning: 0 长度大于256字节的varchar类型字段的在线扩展 create table t1(a varchar(300));Query OK, 0 rows affected (0.08 sec) alter table t1 modify a varchar(500),ALGORITHM=INPLACE, LOCK=NONE;Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warning: 0
  • MDL锁视图简介 社区版MySQL如果不打开performance_schema开关,则无法获取表元数据锁(MDL)的详细信息,但通常情况下performance_schema默认关闭,当用户遇到类似“Waiting for metadata lock”的问题而阻塞DML或DDL后,由于无法确定各个会话之间的关联关系,只能重启实例,增加了解决问题的成本,对业务产生了较大影响。 在业务场景较复杂的情况下,一旦涉及对数据库元数据的互斥操作(如DDL、LOCK TABLE等),会频繁发生操作的会话被其他会话阻塞的问题,给用户带来很大的困扰。 针对以上问题,华为云RDS for MySQL推出了MDL锁视图特性,可以查看数据库各会话持有和等待的元数据锁信息,用户可以有效进行系统诊断,优化自身业务,有效降低对业务影响。
  • 线程池相关操作 查询线程池参数 通过show variables命令查询线程池参数。 show variables like 'threadpool%';+-----------------------------------+------------+| Variable_name | Value |+-----------------------------------+------------+| threadpool_enabled | ON | | threadpool_high_prio_tickets | 4294967295 | | threadpool_idle_timeout | 60 || threadpool_long_conn_time | 2 || threadpool_max_threads | 100000 | | threadpool_oversubscribe | 3 || threadpool_prio_kickup_timer | 1000 | | threadpool_rec_launch_time | ON | | threadpool_size | 128 | | threadpool_slow_conn_log | ON || threadpool_slow_conn_log_interval | 30 || threadpool_slow_launch_time | 2 | | threadpool_stall_limit | 500 | +-----------------------------------+------------+ 表1 线程池参数说明 参数名 参数描述 threadpool_enabled 开启或关闭线程池。 threadpool_high_prio_tickets 高优先级线程持有的tickets数量。 threadpool_idle_timeout 线程销毁前等待的空闲时间(单位:秒)。 threadpool_long_conn_time 登录时间超过此值,则在日志中打印此次登录信息。 threadpool_max_threads 线程池共能创建的线程上限。 threadpool_oversubscribe 每个线程组中最多能创建的额外线程数。 threadpool_prio_kickup_timer 低优先级队列中最长停留时间(单位:毫秒)。 threadpool_rec_launch_time 记录线程启动时间。 threadpool_size 线程组数量。 threadpool_slow_conn_log 是否记录慢登录到error log。 threadpool_slow_conn_log_interval 记录频率,记录一次慢登录后,在此时间间隔内不再记录。 threadpool_slow_launch_time 如登录、查询时间大于此值,则status中 threadpool_slow_launch_request增加1。 threadpool_stall_limit 线程组忙碌检查间隔。 表2 线程池可修改参数说明 参数名 是否是动态参数 数据类型 取值范围 说明 threadpool_enabled 是 boolean [ON,OFF] ON:开启线程池。 OFF:关闭线程池。 threadpool_oversubscribe 是 integer [1,50] 每个线程组中最多能创建的额外线程数。 threadpool_size 是 integer [1,512] 线程组数量。 查询线程池状态 通过show status命令查询线程池状态。 show status like 'threadpool%';+------------------------------------+------------+| Variable_name | Value |+------------------------------------+------------+| Threadpool_active_connections | 65 | | Threadpool_active_threads | 5 | | Threadpool_avg_launch_time | 0 | | Threadpool_dump_threads | 0 | | Threadpool_idle_threads | 63 || Threadpool_running | ON | | Threadpool_slow_launch_request | 0 | | Threadpool_threads | 237 | | Threadpool_threads_high_water_mark | 1075 | | Threadpool_waiting_threads | 57 | | Threadpool_worst_launch_time | 692548 | +------------------------------------+------------+ 表3 线程池状态说明 状态 说明 Threadpool_active_connections 线程池中活跃连接数。 Threadpool_active_threads 线程池中活跃线程数。 Threadpool_avg_launch_time 平均等待时间(单位:毫秒)。 Threadpool_dump_threads dump线程数量。 Threadpool_idle_thread 线程池空闲线程数。 Threadpool_running 线程池是否在运行。 Threadpool_slow_launch_request 超过slow_launch_request的次数。 Threadpool_threads 线程池总连接数。 Threadpool_threads_high_water_mark 历史高位线程数量。 Threadpool_waiting_threads waiting线程池状态。 Threadpool_worst_launch_time 最坏启动时间(单位:毫秒)。
  • 性能测试 表4 不同线程的性能测试 模型 线程 线程池开关是否开启 QPS(每秒查询数) latency(时延,单位是毫秒) oltp_update_non_index 32 是 5932.47 7.84 oltp_update_non_index 64 是 10074.11 9.39 oltp_update_non_index 128 是 18079.61 10.65 oltp_update_non_index 256 是 27439.38 14.46 oltp_update_non_index 512 是 33007.96 28.16 oltp_update_non_index 1024 是 30282.13 51.94 oltp_update_non_index 2048 是 29836.86 95.81
  • 可能原因 可能原因是由于在系统内部安装了远程桌面会话主机角色。 您可以申请免费使用 120 天,之后需要付费,如未付费会则造成远程连接失败。 Windows最多仅允许两个用户连接(包含本地登录用户),若要支持更多连接数量,请安装远程桌面服务角色并取得合法授权数量。 在配置远程桌面会话主机角色后,会同时取消原有默认的2个免费连接授权。所以,在没有正确配置相关授权的时候,会导致远程桌面无法连接,并出现上述错误提示。
  • 处理方法 方法一:申请多用户会话授权的license并激活云服务器。请注意申请license的步骤中需要从微软官方购买远程桌面访问许可证。 请参考申请多用户会话授权的license并激活云服务器。 方法二:参考本节操作删除“远程桌面会话主机”(2008操作系统)或“远程桌面服务”(2012操作系统)。 但删除该角色后,服务器最多仅允许两个用户连接(包含本地登录用户)。 方法三:重装/切换操作系统后重新配置多用户登录。 当前云平台已不支持2008操作系统的公共镜像,如果您使用的2008操作系统,可以切换至2012操作系统。 重装/切换操作系统前请做好系统盘的数据备份。
  • 解决方法 使用远程桌面连接功能后,禁用redirect local drives功能。 打开“运行”窗口。 输入“mstsc”,并单击“确定”。 系统打开“远程桌面连接”窗口。 单击左下角的“选项”,并选择“本地资源”页签。 在“本地设备和资源”栏,单击“详细信息”。 在“本地设备和资源”窗口中,取消勾选“驱动器”。 单击“确定”保存修改。 图1 禁用redirect local drives功能
  • 问题描述 当使用SSH登录Linux弹性云服务器时,即便正确输入了密码,在命令行或secure日志中也会出现类似如下错误信息,导致连接失败: This account is currently not available. Connection to 127.0.0.1 closed. Received disconnect from 127.0.0.1: 11: disconnected by user. pam_unix(sshd:session): session closed for user test.
  • 处理方法 远程登录弹性云服务器。 执行以下命令,查看相应用户的默认Shell。 cat /etc/passwd | grep test 查看相应用户的 Shell 是否被修改成了 nologin。 test:x:1000:1000::/home/test:/sbin/nologin 如果需要修改相关策略配置,在继续之前建议进行文件备份。 执行以下命令,将相应用户的默认Shell修改为bash。 vi /etc/passwd 将/sbin/nologin修改为/bin/bash 使用SSH客户端重新连接服务器。
  • 处理方法 建议不要安装来源不明的软件,使用正版软件,推荐使用Windows2012操作系统。 如果是通过外部镜像创建的服务器,请参考《 镜像服务 用户指南》中“优化Windows私有镜像”章节优化私有镜像。 排查是否是因为CPU占用过高导致的蓝屏,如果是请参考以下操作降低CPU使用率: 可以通过把一些暂时不使用的进程关掉后再尝试。 或者可以尝试重启云服务器。 如果重装系统,请先备份重要数据。 如果服务器有重要数据不能重装,可以通过挂载磁盘方式拷贝数据,需要先备份,再卸载磁盘,然后挂载盘拷贝数据。 如果需要分析蓝屏原因,需要确认是否有配置内存转储文件(crash dump)的收集,系统会自动生成蓝屏dump日志到指定的目录。 由于蓝屏日志的分析非常耗时,建议客户在遇到蓝屏的情况,重启云服务器后,参考如上的可能原因进行排查。一般第三方杀毒软件、系统故障和CPU占用过高是导致云服务器蓝屏最常见的原因。
  • 处理方法 短期处理方法: 执行以下命令重启NetworkManager服务。 systemctl restart NetworkManager 长期处理方法: CentOS 7操作系统云服务器 执行以下命令停止NetworkManager服务,改用network管理网络 systemctl disable NetworkManager /sbin/chkconfig network on kill `pgrep -o dhclient` systemctl stop NetworkManager systemctl start network 出现network启动失败可能为系统内置多网卡配置文件导致,处理方法参考多网卡配置文件导致network启动失败处理。 Ubuntu16.04操作系统 执行以下命令使用networking管理网络。 systemctl disable NetworkManager systemctl disable network-manager systemctl enable networking kill `pgrep -o dhclient` systemctl stop NetworkManager systemctl start networking 启用networking服务,一定要检查interfaces文件中是否设置网络配置为DHCP模式。 vi /etc/network/interfaces 若只有一个网卡eth0则可以检查或增加: auto eth0iface eth0 inet dhcp 图1 设置网络配置为DHCP模式
  • 根因分析 出现该问题的可能原因如下: CentOS 7中/etc/rc.d/rc.local文件没有执行权限。解决方案请参考处理方法1。 /etc/rc.local为/etc/rc.d/rc.local的软链接 /etc/rc.local配置路由重启不生效的场景,是由于添加路由依赖网络服务,而在CentOS 7系统启动过程中内核读取rc.local时网络服务尚未启动,导致添加路由失败。解决方案请参考处理方法2。
  • 处理方法1 针对/etc/rc.d/rc.local文件没有执行权限导致开机启动脚本执行失败的场景,解决方案如下。 CentOS7中该文件默认没有可执行权限 查看/etc/rc.d/rc.local是否有执行权限 ls -l /etc/rc.d/rc.local -rw-r--r-- 1 root root 473 Sep 14 02:19 /etc/rc.d/rc.local 如回显信息所示该文件没有执行权限,需要为/etc/rc.d/rc.local添加可执行权限。 执行以下命令为/etc/rc.d/rc.local添加可执行权限 chmod +x /etc/rc.d/rc.local
  • 根因分析 出现该问题通常有三个原因: /etc/resolv.conf未配置 DNS地址 或者DNS地址错误导致。 /etc/nsswitch.conf文件删除DNS解析记录导致。 /lib64/libnss_dns.so.2库文件丢失导致无法解析 域名 。 执行以下命令,查看解析域名打开的所有文件。 strace -e trace=open ping www.baidu.com -c 1 该结果中出现的所有文件都会影响域名解析。
  • 根因分析 出现该问题通常是密码文件的属性的问题导致,也有可能是根目录空间满。 执行以下命令查看存放用户和密码的文件(/etc/passwd和/etc/shadow)属性。 lsattr /etc/passwd /etc/shadow 如上图所示,/etc/passwd和/etc/shadow文件中有i属性,"i"的文件属性表示该文件不能修改:它不能被删除或重命名,无法为此创建任何链接文件,不能将任何数据写入该文件。只有管理员用户可以设置或清除此属性。 1.如果设置了'a'属性的文件只能在append(只允许增加记录)写作模式。只有管理员用户可以设置或清除此属性。 CAP_LINUX_IMMUTABLE功能可以设置或清除这个属性。 其他文件属性可以执行以下命令查看chattr使用手册。 chattr 2.如果lsattr结果中没有限制增加或者修改的属性,则可能为根分区空间不足,可以查询根分区使用率。 df -h 处理方法则为删除根分区下不需要的文件。
  • 处理方法 场景一:/etc/resolv.conf未配置DNS地址或者DNS地址错误导致。 /etc/resolv.conf中最关键的是nameserver项,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的。 nameserver表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下一个的nameserver。 请检查/etc/resolv.conf中配置的DNS地址。 场景二:/etc/nsswitch.conf文件删除DNS解析记录导致。 检查/etc/nsswitch.conf是否有DNS解析配置。 grep hosts /etc/nsswitch.conf 回显信息如下所示,hosts行中未配置DNS选项,导致解析域名时不会读取/etc/resolv.conf,导致域名解析失败。 #hosts: db files nisplus nis dnshosts: files myhostname 打开/etc/nsswitch.conf找到hosts行添加DNS解析。 #hosts: db files nisplus nis dnshosts: files dns myhostname hosts项的值代表按优先级顺序列出服务,这些服务用于查找域名的IP地址。 “file”表示使用/etc/hosts文件,“ dns”表示使用域名服务。如果“file”位于“ dns”之前,则意味着系统将首先尝试在/etc/hosts中查找域名,然后才通过DNS查找(这是默认配置)。如果未配置dns则不会使用DNS查找。 场景三:/lib64/libnss_dns.so.2库文件丢失导致无法解析域名。 /lib64/libnss_dns.so.2库文件由glibc包产生,可以通过校验glibc查看包是否被修改。 rpm -V glibc 在正常的Linux系统执行 rpm -qf /lib64/libnss_dns.so.2生成库文件。 回显信息如下所示,说明/lib64/libnss_dns.so.2文件缺失。 missing /lib64/libnss_dns.so.2 执行以下命令,重新建立软链接。 在正常的云服务器上执行ls -l /lib64/libnss_dns.so.2可知/lib64/libnss_dns.so.2的源文件为/usr/lib64/libnss_dns-2.17.so。 ln -s /usr/lib64/libnss_dns-2.17.so /usr/lib64/libnss_dns.so.2
  • 处理方法 用chattr命令将i权限撤销,然后再修改密码。 如果文件属性为"i",执行以下命令。 chattr -i /etc/passwd /etc/shadow 如果文件属性为"a",执行以下命令。 chattr -a /etc/passwd /etc/shadow (可选)如果对修改过属性的文件有安全要求需要设置相应的属性,请重新设置相应的属性。 如果设置文件属性为"i",执行以下命令。 chattr +i /etc/passwd /etc/shadow 如果设置文件属性为"a",执行以下命令。 chattr +a /etc/passwd /etc/shadow 查看修改后的文件属性,执行以下命令。 lsattr /etc/passwd /etc/shadow
  • 附录 常见操作系统的默认网络服务配置,建议不修改,直接采用默认值。 表1 常见操作系统的默认网络服务配置 操作系统 网络服务 是否内置DHCP功能 CentOS 6 Network 否,有单独的dhclient进程 CentOS 7 NetworkManager 否,有单独的dhclient进程 CentOS 8 NetworkManager 是 Ubuntu 16.04 NetworkManager 否,有单独的dhclient进程 Ubuntu 18.04 NetworkManager 否,有单独的dhclient进程 Ubuntu 20.04 NetworkManager 是 Ubuntu 22.04 NetworkManager 是
  • 处理方法 登录弹性云服务器。 执行以下命令,编辑hosts文件。 vi /etc/hosts 按“i”,进入编辑模式。 在hosts文件最后添加一行内容,写入IP地址和主机名。 私有IP地址 主机名 示例: 假设弹性云服务器的主机名为“hostname”,私有IP地址为“192.168.0.1”,则需添加的语句为: 192.168.0.1 hostname 按“Esc”退出编辑模式。 执行以下命令,保存并退出。 :wq 针对镜像为Ubuntu、Debian的弹性云服务器,如果需要更新主机名,需将/etc/cloud/cloud.cfg中的manage_etc_hosts参数设置为false,同时将新设置的主机名更新至/etc/hosts中。编辑/etc/hosts文件时,请勿删除127.0.0.1所在行语句,否则会出现非root用户切换root超时问题。
  • 操作步骤 关闭原弹性云服务器,卸载其系统盘,并将系统盘挂载到临时弹性云服务器。 原弹性云服务器关机,进入详情页,并选择“云硬盘”页签。 原弹性云服务器关机时,请勿执行强制关机操作,否则可能引起重置密码操作失败。 单击系统盘所在行的“卸载”,卸载该系统盘。 展开临时弹性云服务器的详情页,并选择“云硬盘”页签。 单击“挂载磁盘”,在“挂载磁盘”对话框中,选择1.b中卸载的系统盘,将其挂载到临时弹性云服务器上。 远程登录临时弹性云服务器,并重置密码。 在临时弹性云服务器的“操作”列下,单击“远程登录”。 执行以下命令,查看原弹性云服务器上卸载的系统盘在临时弹性云服务器上的目录。 fdisk -l 图1 查看系统盘所在的目录 创建临时目录并挂载。 mkdir /aaz mount /dev/vdb1 /aaz 切换至挂载目录。 chroot /aaz 图2 切换至挂载目录 执行以下命令,根据系统提示输入新设置的密码。 passwd 图3 设置新密码 系统显示如下回显信息时,说明密码设置成功。 all authentication tokens updated successfully. 关闭临时弹性云服务器,卸载原弹性云服务器的系统盘,并将其重新挂载回原弹性云服务器后执行重启操作。 临时弹性云服务器关机,并进入详情页,选择“云硬盘”页签。 单击“卸载”,卸载1中临时挂载的数据盘。 展开原Linux弹性云服务器的详情页,选择“云硬盘”页签。 单击“挂载磁盘”,在“挂载磁盘”对话框中,选择3.b中卸载的数据盘,并设置挂载点为“/dev/sda”。 重启原弹性云服务器。
  • 根因分析 通常不会出现删除文件后空间不释放的情况,特殊情况是文件进程锁定,或有进程一直在向这个文件写数据。 为了分析根因,首先需要了解Linux文件的存储机制和存储结构。 一个文件在文件系统中存放分为两个部分: 指针部分:指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清除了。 数据部分:而数据部分存储在磁盘中。 将数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容。出现删除access_log文件后,空间还没有释放的原因,是因为httpd进程还在一直向这个文件写入内容,导致删除了access_log文件后,进程锁定,文件对应的指针部分并未从meta-data中清除,由于指针并未删除,系统内核就默认文件并未被删除,因此查询文件系统使用率时,显示空间并未释放。
  • 处理方法 在控制台重启主机,进入单用户模式。 进入单用户模式的详细操作请参考Linux云服务器如何进入单用户模式重置root密码 执行以下命令检查/etc/passwd文件 。 cat /etc/passwd 确认passwd文件已被破坏,执行以下命令使用系统初始的备份passwd-文件替换损坏的passwd文件 。 cp /etc/passwd- /etc/passwd 该操作会造成自行添加的用户丢失,如果为应用运行的用户会导致应用启动失败,待修复后请自行添加用户。 执行以下命令退出当前根目录至initramfs的根目录。 exit 重启云服务器。 (可选)待系统启动,添加丢失的用户,例如执行以下命令添加Nginx运行用户nobody并指定该用户shell为/sbin/nologin(请根据场景添加用户,需要登录系统的用户需要指定shell为/bin/bash)。 useradd nobody -s /sbin/nologin
  • 可能原因 E CS 实例的网络配置为DHCP(Dynamic Host Configuration Protocol,动态主机设置协议)方式。 以CentOS 7的ECS为例,如果网络配置为DHCP方式,当ECS实例启动时,Linux系统的NetworkManager服务会启动dhclient进程,dhclient进程会向DHCP服务器请求分配IP地址,并获得IP地址租约到期时间。 正常情况下,dhclient进程会定期向DHCP服务器更新租约到期时间,以确保实例IP地址的可用性,如下图: 图2 正常情况 当用户误操作停止了NetworkManager服务,并清理了dhclient进程时,会导致ECS实例无法自动更新IP地址的续租到期时间。当租约到期后,ECS实例的IP地址会被释放,导致网络不通。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全