linux centos7 常用命令 更新2

文章讲述了在CentOS7中正确使用关机命令如poweroff、shutdown和reboot的技巧,强调了避免突然断电带来的问题。同时,介绍了如何在MySQL中创建类似ClickHouse表结构的表,以及数据从ClickHouse迁移到MySQL的方法。
摘要由CSDN通过智能技术生成

一.Linux centOS7 关掉机器命令,再拔掉电源,所有服务都要重启吗?

当你在 CentOS 7(或任何其他 Linux 发行版)上执行关机命令(如 shutdown -h now 或 poweroff)时,系统会尝试正常关闭所有运行的服务和进程,然后关闭电源。如果这个过程正常完成,那么理论上你不需要在下次启动时重新启动所有服务。

但是,如果你在系统正在关闭的过程中突然拔掉电源,那么可能会出现一些问题。突然的断电可能会导致文件系统的不一致、正在运行的服务未能正常关闭,以及数据库或其他持久性存储的损坏。

在这种情况下,下次启动时,系统可能需要进行一些恢复操作,如检查文件系统的一致性(fsck)等。此外,某些服务可能无法正常启动,因为它们依赖于先前运行的状态或持久性存储的数据。

为了避免这种情况,最佳实践是在关闭系统之前使用适当的命令(如 shutdown 或 poweroff),并确保系统有足够的时间来完成关闭过程。如果你确实需要在系统关闭时拔掉电源(例如在移动服务器或数据中心中),请确保你已经执行了适当的关机命令,并等待一段时间以确保系统已经完全关闭。

总之,虽然突然的断电不一定会导致所有服务都需要重启,但它确实增加了系统不稳定和数据损坏的风险。因此,建议在关闭系统之前使用适当的命令,并确保系统有足够的时间来完成关闭过程。

1.关机命令

关闭远程服务器

可使用poweroff和shutdown命令进行关机操作,关机命令示例:

#立刻关机。
halt 
#立刻关机
poweroff 
#立刻关机
shutdown -h now 
#10分钟后自动关机
shutdown -h 30 
# 以上两个延时关机的命令可以使用以下命令取消
shutdown -c
shutdown [-krhc] [时间] [警告信息]
-k:不是真正的关机,只是发出警告信息
-r:在将系统的服务停掉之后就重启
-h:将系统的服务停掉之后就关机
-c:取消已经在进行的shutdown命令内容
时间:指定系统关机的时间,若不指定则默认1分钟后自动关机

halt [-n] [-w] [-d] [-f] [-i] [-p]

参数说明:

-n : 在关机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的关机,只是把记录写到 /var/log/wtmp 文件里
-d : 不把记录写到 /var/log/wtmp 文件里(-n 这个参数包含了 -d) -f : 强迫关机,不呼叫 shutdown 这个指令
-i : 在关机之前先把所有网络相关的装置先停止
-p : 当关机的时候,顺便做关闭电源(poweroff)的动作


poweroff 命令命令用于关闭计算器并切断电源。
关机同时关闭电源,会发送一个ACPI信号通知系统关机,在多用户方式下(run level3)下不建议使用
halt -p相当于poweroff
使用权限:系统管理者。。

语法

poweroff [-n] [-w] [-d] [-f] [-i] [-h]

参数说明:

-n : 在关机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的关机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 文件里
-i : 在关机之前先把所有网络相关的装置先停止
-p : 关闭操作系统之前将系统中所有的硬件设置为备用模式。
reboot
reboot
1
Linux reboot命令用于用来重新启动计算机。

若系统的 runlevel 为 0 或 6 ,则重新开机,否则以 shutdown 指令(加上 -r 参数)来取代
reboot的工作过程差不多跟halt一样,不过它是引发主机重启,而halt是关机,它的参数与halt相差不多
语法

reboot [-n] [-w] [-d] [-f] [-i]

参数说明:

-n : 在重开机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
-f : 强迫重开机,不呼叫 shutdown 这个指令
-i : 在重开机之前先把所有网络相关的装置先停止

在系统关机前使用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结,即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的,还可能重启。这是由所有进程(process)都会收到系统所送达的信号(signal)决定的。这让像vi之类的程序有时间储存目前正在编辑的文档,而像处理邮件(mail)和新闻(news)的程序则可以正常地离开等等。

shutdown执行它的工作是送信号(signal)给init程序,要求它改变runlevel。Runlevel 0被用来停机(halt),runlevel 6是用来重新激活(reboot)系统,而runlevel 1则是被用来让系统进入管理工作可以进行的状态。这是预设的,假定没有-h也没有-r参数给shutdown。要想了解在停机(halt)或者重新开机(reboot)过程中做了哪些动作,可以在这个文件/etc/inittab里看到这些runlevels相关的资料。

本文参考 链接:linux(centos7) 关机命令重启命令_centos7关机命令-CSDN博客

 2.重启命令 

插上电源,就可以了,之前运行的服务还是在启动中,这点比较方便

systemctl reboot

将给出类似的提示,系统将重启:

To reboot your system, you must go to /sbin/reboot.

二.怎么快速在mysql中建立和clickhouse表结构类似的表

CREATE TABLE default.ht_access_log_test_toDateTime_toUInt64_order (     `pro_tp` UInt16 COMMENT '协议类型',     `pro_ver` UInt16 COMMENT '协议版本',     `log_type` UInt32 COMMENT '日志类型',     `app_path` String COMMENT '产品标识',     `ac_time` DateTime COMMENT '访问时间',     `sub_sn` String COMMENT '主体SN',     `sub_id` UInt32 COMMENT '主体ID',     `sub_data` String COMMENT '主体扩展数据',     `svc_id` UInt32 COMMENT '服务ID',     `zon_id` UInt32 COMMENT '域ID',     `zon_name` String COMMENT '域名称',     `app_name` String COMMENT '应用名称',     `ob_sn` String COMMENT '客体url',     `ob_id` UInt32 COMMENT '客体ID',     `ob_data` String COMMENT '客体数据',     `ac_cmd` String COMMENT '操作命令',     `ac_params` String COMMENT '命令参数',     `proc_content` String COMMENT '过程记录(2)',     `req_time` DateTime COMMENT '请求时间',     `req_len` UInt64 COMMENT '请求数据长度',     `req_data` String COMMENT '请求数据内容',     `resp_time` DateTime COMMENT '响应时间',     `resp_len` UInt64 COMMENT '响应数据长度',     `resp_data` String COMMENT '响应数据内容',     `result` Int32 COMMENT '结果(错误码)',     `err_reason` String COMMENT '错误原因',     `remark` String COMMENT '备注',     `ob_name` String,     `response_time` UInt64 ) ENGINE = MergeTree PARTITION BY toDate(ac_time) ORDER BY (ac_time,  sub_id,  ob_id) SETTINGS index_granularity = 8192

1.快速在mysql中建立和clickhouse表结构类似的表

在MySQL中,你不能使用ClickHouse特有的MergeTree引擎和PARTITION BY子句,因为MySQL和ClickHouse是两种不同的数据库管理系统。MySQL使用的是关系型数据库的存储引擎,如InnoDB或MyISAM。

为了在MySQL中创建一个类似的表,你需要使用MySQL的语法和数据类型。下面是一个在MySQL中创建类似表的例子:

sqlCREATE TABLE ht_access_log_test_toDateTime_toUInt64_order (
`pro_tp` SMALLINT UNSIGNED COMMENT '协议类型',
`pro_ver` SMALLINT UNSIGNED COMMENT '协议版本',
`log_type` INT UNSIGNED COMMENT '日志类型',
`app_path` VARCHAR(255) COMMENT '产品标识',
`ac_time` DATETIME COMMENT '访问时间',
`sub_sn` VARCHAR(255) COMMENT '主体SN',
`sub_id` INT UNSIGNED COMMENT '主体ID',
`sub_data` TEXT COMMENT '主体扩展数据',
`svc_id` INT UNSIGNED COMMENT '服务ID',
`zon_id` INT UNSIGNED COMMENT '域ID',
`zon_name` VARCHAR(255) COMMENT '域名称',
`app_name` VARCHAR(255) COMMENT '应用名称',
`ob_sn` VARCHAR(255) COMMENT '客体url',
`ob_id` INT UNSIGNED COMMENT '客体ID',
`ob_data` TEXT COMMENT '客体数据',
`ac_cmd` VARCHAR(255) COMMENT '操作命令',
`ac_params` TEXT COMMENT '命令参数',
`proc_content` TEXT COMMENT '过程记录(2)',
`req_time` DATETIME COMMENT '请求时间',
`req_len` BIGINT UNSIGNED COMMENT '请求数据长度',
`req_data` TEXT COMMENT '请求数据内容',
`resp_time` DATETIME COMMENT '响应时间',
`resp_len` BIGINT UNSIGNED COMMENT '响应数据长度',
`resp_data` TEXT COMMENT '响应数据内容',
`result` INT COMMENT '结果(错误码)',
`err_reason` TEXT COMMENT '错误原因',
`remark` TEXT COMMENT '备注',
`ob_name` VARCHAR(255) COMMENT '客体名称',
`response_time` BIGINT UNSIGNED COMMENT '响应时间戳(单位:毫秒)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='访问日志表';

-- 创建索引以优化查询性能
CREATE INDEX idx_ac_time ON ht_access_log_test_toDateTime_toUInt64_order (ac_time);
CREATE INDEX idx_sub_id ON ht_access_log_test_toDateTime_toUInt64_order (sub_id);
CREATE INDEX idx_ob_id ON ht_access_log_test_toDateTime_toUInt64_order (ob_id);

请注意以下几点:

  1. MySQL中没有UInt16UInt32UInt64这样的数据类型,它们分别对应于MySQL的SMALLINT UNSIGNEDINT UNSIGNEDBIGINT UNSIGNED

  2. String类型在MySQL中通常被替换为VARCHARTEXT,具体取决于你预计的数据长度。

  3. 在MySQL中,PARTITION BY子句用于分区表,但分区的键和方式与ClickHouse不同。在MySQL中,你可以根据日期范围、列表、哈希等方式来分区表。由于MySQL没有toDate函数,你需要使用日期函数(如YEAR()MONTH()等)来定义分区键。

  4. 在MySQL中,表的物理存储顺序由主键决定。你可以通过定义主键来达到与ClickHouse中ORDER BY类似的效果。但是,MySQL不支持多列作为主键,所以你需要创建一个单独的索引来达到相同的目的。

  5. ENGINE=MergeTree在MySQL中无效,因为MySQL不支持ClickHouse的MergeTree引擎。在MySQL中,你可以使用ENGINE=InnoDB或其他支持的存储引擎。

  6. MySQL的字符集通常使用utf8mb4以支持存储各种Unicode字符,包括emoji等。

  7. 由于MySQL没有toUInt64函数,response_time字段被定义为BIGINT UNSIGNED,你可以在应用层将时间戳转换为毫秒单位,或者在查询时进行计算。

最后,根据你的查询需求和数据量,你可能需要进一步优化表结构和索引设置。

2.clickhouse 中DateTime类型    年月日时分秒   怎么截取到年月日?

在ClickHouse中,DateTime 类型通常用于存储日期和时间信息。如果你想要从一个 DateTime 类型的列中截取到只包含“年月日”的格式,你可以使用 toYYYYMMDDDate 函数。这个函数会将 DateTime 类型转换为 Date 类型,只保留年月日的信息。

例如,假设你有一个名为 my_table 的表,其中有一个 DateTime 类型的列名为 event_time。要获取该列的年月日部分,你可以这样查询:

sqlSELECT toYYYYMMDDDate(event_time) AS event_date FROM my_table;

这将返回一个只包含年月日信息的 Date 类型列 event_date

如果你想要以字符串的形式获取年月日,并且按照某种特定的格式(比如 'YYYY-MM-DD'),你可以使用 formatDateTime 函数:

sqlSELECT formatDateTime(event_time, '%Y-%m-%d') AS formatted_date FROM my_table;

这里,%Y 代表4位数的年份,%m 代表月份,%d 代表日期。这样,formatted_date 列就会以 'YYYY-MM-DD' 的格式显示年月日。

3.clickhouse数据怎么传输到mysql表中

将 ClickHouse 中的数据传输到 MySQL 表中通常涉及以下步骤:

  1. 数据抽取:首先,你需要从 ClickHouse 数据库中提取数据。这通常可以通过使用 SQL 查询来完成,具体取决于你想要传输哪些数据。
  2. 数据转换:由于 ClickHouse 和 MySQL 在数据类型、存储方式等方面可能存在差异,因此可能需要对数据进行转换,以确保它们能够在 MySQL 中正确存储。
  3. 数据传输:然后,你需要将提取和转换后的数据传输到 MySQL。这可以通过多种方法完成,包括使用脚本、数据库管理工具或第三方工具。
  4. 数据加载:最后,在 MySQL 中加载数据。这可能涉及创建新表、更新现有表或执行其他必要的数据库操作。

以下是一个简化的示例,展示了如何使用 Python 脚本和 pandas 库将 ClickHouse 数据传输到 MySQL:

安装必要的库

bashpip install clickhouse-driver pandas pymysql

编写 Python 脚本

pythonimport pandas as pd
from clickhouse_driver import Client
from sqlalchemy import create_engine

# ClickHouse 连接
clickhouse_conn = Client('localhost')

# MySQL 连接
mysql_engine = create_engine('mysql+pymysql://user:password@localhost/dbname')

# 从 ClickHouse 查询数据
query = 'SELECT * FROM your_clickhouse_table'
clickhouse_data = clickhouse_conn.execute(query).fetchall()

# 将数据转换为 pandas DataFrame
df = pd.DataFrame(clickhouse_data, columns=[...]) # 用实际的列名替换 [...]

# 将数据写入 MySQL
df.to_sql('your_mysql_table', mysql_engine, if_exists='append', index=False)

运行脚本

保存脚本并运行它,数据应该从 ClickHouse 传输到 MySQL。

import numpy as np
import pandas as pd
import datetime
from datetime import datetime
import clickhouse_driver
import subprocess
import clickhouse_connect
from clickhouse_driver import Client
from sqlalchemy import create_engine
mysql_engine = create_engine('mysql+pymysql://root:ht123abc*#@192.168.20.87/default')
connection = clickhouse_driver.connect(host="192.168.1.195", port='9000',user="default",password="你的密码")
# Read data from ClickHouse database
query = 'SELECT * FROM htsui.ht_access_log'
data = pd.read_sql(query, connection)
print(data['ac_time'])
data['response_time']=(data['resp_time']-data['ac_time'])/1000
# # 将timestamp列转换为日期型
data['ac_time'] = pd.to_datetime(data['ac_time'], unit='ms')##访问时间
data['req_time']= pd.to_datetime(data['req_time'], unit='ms')##请求时间
data['resp_time']= pd.to_datetime(data['resp_time'], unit='ms')##响应时间
# data.to_sql('ht_access_log_test_toDateTime_toUInt64_order', mysql_engine, if_exists='append', index=False)

注意:Python连接Clickhouse坑1:dbaver客户端用的8023端口号,在python得用port='9000'

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值