站内公告:

我们的虚拟社区正式开通了

Main Menu

最新帖子

#1
MariaDB/MySql数据库 / MySQL的create table as 与create ...
上次发布者 jvip_chen - 2025-2月-18 02:43 下午
对于mysql的复制相同表结构方法,有create table as 和create table like 两种:
create table t2 as select * from t1;
as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引。
create table t2 like t1 ;
like 创建出来的新表包含源表的完整表结构和索引信息。

二者的用途:

as用来创建相同表结构并复制源表数据

like用来创建完整表结构和全部索引

实际开发中,我们可以通过create table like根据一个已知的表,复制出一个新的表
#2
MariaDB/MySql数据库 / MySQL create table as select
上次发布者 jvip_chen - 2025-2月-18 02:42 下午
CREATE TABLE ... SELECT 是 MySQL 中的一个非常有用的语句,它允许你从一个已有的表中选取数据,并基于这些数据创建一个新的表。这个语句结合了数据的选择(SELECT)和新表的创建(CREATE TABLE)两个操作。

基本语法
CREATE TABLE 新表名 AS
SELECT 列1, 列2, ...
FROM 已有表名
WHERE 条件;
示例
假设你有一个名为 employees 的表,结构如下:
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    position VARCHAR(100),
    salary DECIMAL(10, 2)
);
并且这个表里已经有一些数据。现在你想创建一个新表 high_salary_employees,只包含那些薪水高于5000的员工。你可以这样做:

CREATE TABLE high_salary_employees AS
SELECT id, name, position, salary
FROM employees
WHERE salary > 5000;
执行这个语句后,high_salary_employees 表就会被创建,并且包含所有满足 salary > 5000 条件的 employees 表中的记录。

注意事项
‌索引和约束‌:CREATE TABLE ... SELECT 语句不会自动复制原表中的索引、主键、外键约束等。如果你需要在新表中保留这些结构,你需要在创建表后手动添加它们。

‌数据类型‌:新表中的列数据类型会根据 SELECT 语句中选取的数据类型自动确定。如果你需要特定的数据类型或属性(比如 NOT NULL),你可能需要在创建表后修改列定义。

‌性能‌:对于大数据量的表,使用 CREATE TABLE ... SELECT 可能会消耗较多资源和时间,因为它实际上是在复制数据。

‌临时表‌:这个语句经常用于创建临时表来存储查询的中间结果,特别是在复杂查询或报表生成中。

‌MySQL 版本‌:不同版本的 MySQL 在 CREATE TABLE ... SELECT 语句的实现上可能有一些细微的差异,特别是在处理索引和约束方面。因此,建议查阅你所使用的 MySQL 版本的官方文档以获取最准确的信息。
#3
1. 修改php.ini配置文件:
  在PHP安装目录下找到php.ini文件,用文本编辑器打开。搜索并找到"memory_limit"这个参数,可以看到类似以下的配置:
   memory_limit = 128M
  将其修改为想要设定的内存大小,例如:
 
   memory_limit = 256M
 
  保存修改后的php.ini文件,并重启PHP服务,使修改生效。

2. 使用ini_set()函数:
  在PHP代码中可以使用ini_set()函数来设置内存大小,例如:
 
 
ini_set('memory_limit', '256M'); 
  这样会在当前脚本中将内存大小设定为256M。注意,这种方法只在当前脚本运行时生效,不会影响其他脚本或全局设置。

3. 通过.htaccess文件修改:
  如果你的服务器支持.htaccess文件,并且已启用了rewrite模块,可以在网站根目录下创建一个名为".htaccess"的文件,添加以下代码:
 
 
php_value memory_limit 256M 
  保存并上传该文件,然后重启PHP服务,修改将会生效。

4. 与服务器管理员或主机提供商联系:
  如果你无法直接修改配置文件或没有足够权限进行修改,你可以联系服务器管理员或主机提供商,请求他们帮助你修改PHP内存大小。他们可能会在服务器级别进行设置。

无论你选择哪种方法,修改PHP内存大小时要注意不能超过服务器或主机的允许范围,同时也要根据实际需要合理设置内存大小,以避免浪费资源或出现意外问题。同时,修改内存大小可能需要重启PHP服务或服务器才能生效。
#4
在Linux系统中,可以通过多种方法查看主机的序列号。以下是几种常见的方法:

1. 使用 dmidecode 命令
dmidecode 是一个用于获取DMI(Desktop Management Interface)信息的工具,它可以提供硬件的详细信息,包括序列号。

打开终端。
输入以下命令并按回车键执行:
sudo dmidecode -s system-serial-number
查看终端输出的序列号。
2. 使用 cat 命令查看文件
在某些Linux发行版中,主机的序列号可能存储在 /sys/class/dmi/id/product_serial 文件中。

打开终端。
输入以下命令并按回车键执行:
cat /sys/class/dmi/id/product_serial
查看终端输出的序列号。
3. 使用 lshw 命令
lshw 是一个硬件配置信息工具,它可以提供硬件的详细信息。

首先,确保已经安装了 lshw 工具。如果未安装,可以使用包管理器进行安装(例如,在基于Debian的系统上可以使用 sudo apt-get install lshw 命令安装)。
安装完成后,打开终端。
输入以下命令并按回车键执行:
sudo lshw -class system | grep serial
查看终端输出的序列号。
通过以上方法,你可以在Linux系统中方便地查看主机的序列号。每种方法都有其适用场景,可以根据实际情况选择合适的方法。
#5
Linux 系统 / DNAT SNAT MASQUERADE的区别
上次发布者 jvip_chen - 2024-12月-10 02:27 下午
DNAT、SNAT和MASQUERADE是网络地址转换(NAT)的三种主要技术,它们在Linux网络配置中有着不同的应用场景和功能。‌

DNAT(Destination Network Address Translation)
DNAT(目标网络地址转换)用于将外部网络的目标IP地址转换为内部网络的IP地址。其典型应用场景包括:

‌Web服务器‌:当外部用户访问一个配置在内部网络中的web服务器时,防火墙会将目标地址从其公网IP地址改为内网服务器的IP地址,从而实现外部用户对内网服务的访问。例如,命令iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.18.0.2:80会将所有目标端口为80的TCP请求转发到内网IP 172.18.0.2的80端口‌12。
SNAT(Source Network Address Translation)
SNAT(源网络地址转换)用于将内部网络的私有IP地址转换为公共IP地址,使得内部网络中的设备可以访问外部网络。其工作原理包括:

‌源地址转换‌:当内部设备向外部网络发送数据包时,SNAT会将数据包的源IP地址替换为公共IP地址,并将源端口号转换为随机端口号。这样,外部网络可以将响应数据包发送回公共IP地址和转换后的端口号,然后再通过SNAT将数据包转发到内部设备‌12。
‌命令示例‌:例如,命令iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.5.1会将10.8.0.0/24网段的所有数据包的源IP地址替换为192.168.5.1‌3。
MASQUERADE
MASQUERADE是一种特殊的SNAT技术,主要用于动态IP地址的环境。它会自动检测并替换出站数据包的源IP地址为当前接口的IP地址。其特点包括:

‌动态IP支持‌:MASQUERADE特别适用于动态获取IP地址的环境,如拨号连接或移动设备,因为它会自动检测并使用当前的公共IP地址进行转换‌12。
‌命令示例‌:例如,命令iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE会将10.8.0.0/24网段的所有出站数据包的源IP地址替换为接口eth0的IP地址‌3。
应用场景和区别
‌DNAT‌:主要用于外部用户访问内部服务,如web服务器。
‌SNAT‌:主要用于内部设备访问外部网络,实现私有IP到公共IP的转换。
‌MASQUERADE‌:适用于动态IP环境,自动检测并使用当前公共IP地址进行转换。
这些技术共同工作,确保内部网络的安全和外部访问的便利性,同时解决了IPv4地址不足的问题。
#6
VMware / Re: vmrun命令行的使用(VMWare虚拟机)
上次发布者 james19820515 - 2024-10月-07 05:54 下午
1.好玩意儿。
2.非必要不用命令行。
#7
Linux 系统 / Could not open a connection to...
上次发布者 jvip_chen - 2023-10月-31 11:39 上午
执行ssh-add时出现Could not open a connection to your authentication agent

在执行
ssh-add ~/.ssh/id_ras时发生此错,执行如下命令 
ssh-agent bash
然后再执行
ssh-add ~/.ssh/id_ras
即可。
#8
Linux 系统 / SSH自动登录config文件配置
上次发布者 jvip_chen - 2023-8月-28 06:53 上午
概述
之前说过可以使用 spawn 命令来自动登录服务器,但是仅仅是登录那么很方便,如果使用 scp 拷贝文件呢?是不是得使用最原始的 scp user@host:/xxx .,这样就不方便了。

配置服务端
将本机的 ~/.ssh/id_rsa.pub 文件配置到服务器的 ~/.ssh/authorized_keys 文件中。

使用 ssh-copy-id 进行上传,运行 ssh-copy-id xxx@0.0.0.0 会自动将公钥追加到 authorized_keys 文件中。

注意:.ssh 目录的权限和 authorized_keys 的权限分别是 700 和 600。

配置客户端
配置好服务端之后我们就可以使用 ssh user@host 直接登录服务器了,不需要输入密码,那么我们还得记住 user 和 host,还有更简单的方法吗?那当然啦。

配置 ~/.ssh/config 文件

直接显示我的配置内容

Host {name}
    HostName {host}
    User {user}
    IdentityFile ~/.ssh/id_rsa
Host {name}
    HostName {host}
    Port {port}
    User {user}
    IdentityFile ~/.ssh/id_rsa
注意空格和缩进

{name} 就是给服务器起一个别名,{port} 可以不写,默认22端口

配置完后,就可以使用 ssh {name} 直接登录服务器了,那么使用 scp 呢?直接使用 scp {name}:/xxx . 就可以了。
#9
代码管理-Git / gitlab备份与恢复
上次发布者 jvip_chen - 2023-8月-17 11:09 上午
前言
本文主要介绍gitlab安装完成之后,使用过程中的备份和恢复。安装教程可参考上方的Linux安装gitlab教程。备份两种方式:手动备份和定时备份

以下是本篇文章正文内容
一、更改配置文件
上文说到过gitlab的配置文件为/etc/gitlab下的gitalab.rb,把下列配置信息写入配置文件使其生效

vim /etc/gitlab/gitlab.rb
#修改如下:
gitlab_rails['manage_backup_path'] = true       
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"    //gitlab默认备份目录,如有需要可更改
gitlab_rails['backup_archive_permissions'] = 0644      //生成的备份文件权限
gitlab_rails['backup_keep_time'] = 604800              //默认备份保留天数为7天(这里是604800秒)
更改完成后重载配置文件

gitlab-ctl reconfigure
二、手动备份
可以手动执行如下命令进行手动备份,备份后文件如下:

gitlab-backup create
三、自动备份
编写备份脚本,结合crontab实施自动定时备份,比如每天2点备份一次

cd
cd bin/
vim gitlab_backup.sh

#!/bin/bash
/usr/bin/gitlab-rake gitlab:backup:create
然后加入到crontab中

0 2 * * * /bin/bash /root/bin/gitlab_backup.sh > /dev/null 2>&1

四、备份恢复
GItlab只能还原到与备份文件相同的gitlab版本。
假设在上面gitlab备份之前创建了test项目,然后不小心误删了test项目,现在就进行gitlab恢复操作:

1、停止相关数据连接服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
查看gitlab状态
gitlab-ctl status
2、通过之前的备份文件进行恢复(默认的是/var/opt/gitlab/backups)

Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复

gitlab-backup restore force=yes
# 如果/var/opt/gitlab/backups/下有多个备份文件,可以执行下面命令指定恢复的目标
gitlab-backup restore force=yes BACKUP=1673231242_2023_01_09_15.5.4
最后再次启动Gitlab

gitlab-ctl start
恢复命令完成后,可以check检查一下恢复情况

gitlab-rake gitlab:check SANITIZE=true
然后稍等一会(如果启动gitlab后,访问出现500,这是因为redis等程序还没完全启动,等一会儿访问就ok了),再次登录Gitlab,就会发现之前误删除的test项目已经恢复了!

另外:Gitlab迁移与恢复一样,但是要求两个GitLab版本号一致。
#10
Linux Shell - 脚本中自动确认需要输入确认的命令
1、yum 命令
通过指定 -y 参数即可
yum -y  install xxx
2、其它命令
echo y | 执行的命令