备忘录

247 阅读1分钟

查看TCP连接数

netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'

数据库控制台导出查询的数据

生产环境中有时候需要将查询到的的数据导出到CSV文件或者Excel中,可以通过如下命令导出

select * from table表名 where 条件 into outfile "/var/lib/mysql-files/TestData.csv" fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by "\r\n";

Mysql服务相关命令

` 启动mysql服务:

systemctl start mysqld.service

停止mysql服务:

systemctl stop mysqld.service

重启mysql服务:

systemctl restart mysqld.service

查看mysql服务当前状态:

systemctl status mysqld.service

设置mysql服务开机自启动:

systemctl enable mysqld.service

停止mysql服务开机自启动:

systemctl disable mysqld.service `

查看mysql的端口

show global variables like 'port'

修改mysql的密码

用SET PASSWORD命令

首先登录MySQL。

命令格式:

mysql> set password for 用户名@localhost = password('新密码');

Eg:

mysql> set password for root@localhost = password('123');

mysqladmin

此时不用登录mysql客户端 命令格式:

mysqladmin -u用户名 -p旧密码 password 新密码

Eg:

mysqladmin -uroot -p123456 password 123

直接更新MySQL User表

首先登录MySQL。

mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges **;**

忘记root密码

以windows为例:

  1. 关闭正在运行的MySQL服务。
  2. 打开DOS窗口,转到mysqlin目录。
  3. 输入mysqld --skip-grant-tables 回车。–skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
  4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlin目录。
  5. 输入mysql回车,如果成功,将出现MySQL提示符 >。
  6. 连接权限数据库: use mysql; 。
  7. 改密码:update user set password=password(“123”) where user=“root”;(别忘了最后加分号)。
  8. 刷新权限(必须步骤):flush privileges;
  9. 退出 quit。
  10. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

CompletableFuture 并发多任务处理使用示例

        List<CompletableFuture<JSONObject>> futures = new ArrayList<>();
        ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(6, 8, 1L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(8));
        for (int i=0;i<=10;i++) {
            futures.add(CompletableFuture.supplyAsync(() -> {
                JSONObject typeCount = getFunction();
                return typeCount;
            }, poolExecutor));
        }
        //等待全部完成
        CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();

访问springboot接口出现401 、403、 Forbidden

出现401可能是框架中添加了 spring-boot-starter-security ,这时候需要进行http请求降级处理 如果是Spring Boot 1.x版本,在配置文件中添加 management.security.enabled=false 就可以

Spring Boot 2.x中的management.security.enabled=false无效问题,编写 SecurityConfig 继承 WebSecurityConfigurerAdapter ,重写configure(HttpSecurity http) 方法即可。

出现403,Forbidden,这个是因为开启了CSRF保护,关闭即可。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests().anyRequest().permitAll().
                and().logout().permitAll()
                .and().csrf().disable();//关闭CSRF保护即可。
        ;
    }
}

如何将Docker容器中的文件拷贝到宿主机

可以使用 docker cp 命令来拷贝,语法格式如下:

docker cp 容器ID:容器内路径 目的主机路径

如果想将宿主机中的文件拷贝到容器中,只需要将源路径和目的路径调换即可:

docker cp 目的主机路径 容器ID:容器内路径 

mysqldump 和 source 命令

mysqldump命令

mysqldump命令备份mysql中的数据,一般是对整个数据库进行备份,命令格式如下:

mysqldump -u root -p 数据库名 > 文件名.sql;

eg:

mysqldump -u root -p test_database > test_database.sql;

如果需要备份某个数据的某张表,可以使用如下命令:

 mysqldump -u root -p -d database_name table_name > db.sql;

source命令

使用mysqldump生成备份文件后,可以使用source命令恢复数据,首选先登录mysql Console

mysql -u root -p 密码

然后选中要备份的数据库:

> use database;

然后就可以使用source命令进行数据恢复,命令格式如下:

> source 备份文件路径

eg:

source /home/mysql/backup/test_database.sql;

执行如上命令即可恢复数据!

Linux 常用命令

查看Linux 系统版本

cat /etc/*release

Centos7防火墙命令

检查防火墙状态
  • systemctl status firewalld # 检查 firewalld 服务状态
  • firewall-cmd --state # 检查防火墙是否启用
开启/关闭防火墙
  • systemctl start firewalld # 启动防火墙
  • systemctl stop firewalld # 停止防火墙
  • systemctl restart firewalld # 重启防火墙
  • systemctl enable firewalld # 开机自启动防火墙
  • systemctl disable firewalld # 禁止开机自启动防火墙
添加端口
  • firewall-cmd --zone=public --add-port=80/tcp --permanent # 打开80端口,添加永久规则
  • firewall-cmd --zone=public --remove-port=80/tcp --permanent # 关闭80端口,移除永久规则
添加服务
  • firewall-cmd --zone=public --add-service=http --permanent # 打开http服务,添加永久规则
  • firewall-cmd --zone=public --remove-service=http --permanent # 关闭http服务,移除永久规则

防火墙命令汇总

  • 启动firewalld服务

    • systemctl start firewalld.service
  • 关闭firewalld服务

    • systemctl stop firewalld.service
  • 重启firewalld服务

    • systemctl restart firewalld.service
  • 查看firewalld状态

    • systemctl status firewalld.service
  • 开机自启firewalld

    • systemctl enable firewalld
  • 查看版本

    • firewall-cmd --version
  • 查看帮助

    • firewall-cmd --help
  • 显示状态

    • firewall-cmd --state
  • 查看当前所有规则

    • firewall-cmd --list-all
  • 查看所有打开的端口

    • firewall-cmd --zone=public --list-ports
  • 添加开放端口

    • firewall-cmd --zone=public --add-port=80/tcp --permanent
    • permanent永久生效,没有此参数重启后失效
  • 查看端口是否开放

    • firewall-cmd --zone=public --query-port=80/tcp
  • 删除开放端口

    • firewall-cmd --zone=public --remove-port=80/tcp --permanent
  • 批量开放一段TCP端口

    • firewall-cmd --permanent --add-port=9001-9100/tcp
  • 开放IP的访问

    • firewall-cmd --permanent --add-source=192.168.1.1
  • 开放整个源IP段的访问

    • firewall-cmd --permanent --add-source=192.168.1.0/24
  • 移除IP访问

    • firewall-cmd --permanent --remove-source=192.168.1.1
  • 允许指定IP访问本机80端口

    • firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="80" accept'
  • 禁止指定IP访问本机80端口

    • firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="80" reject'
  • 移除允许指定IP访问本机80端口规则

    • firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="80" accept'
  • 更新防火墙规则

    • firewall-cmd --reload

每次更改firewall规则后需重新加载 firewall-cmd --reload

SPU 和 SKU 定义

  • SPU:Standard Product Unit,标准产品单元,可以理解为一个产品型号,比如上面图片看到的iPhone 14 (A2884) 就是一个标准的产品单元,它属于生产制造过程的一个标准品,标准品在缺乏具体规格信息的时候是不能直接售卖的(除非这个产品系列只有一个规格)。

  • SKU:Stock Keeping Unit,最小库存单元,也就是对应仓库中的一件商品,这个商品的规格信息在入库的时候就已经确定了的,因此是可以直接售卖的。

SPU 和 SKU 的关系:SPU 是一个相对抽象的概念,而SKU 是具象化的 SPU,也就是在 SPU 基础上添加了一个可售卖完整的规格信息,从而能够让顾客明确知道拿到手的商品是什么样。以服装为例,服装的一个款式是一个 SPU,只有加上了尺码、颜色后才能成为一个 SKU。

工具类中注入配置文件属性

@Component
public class WxUtil {

    private static String wxBaseUrl;

    @PostConstruct
    public void init() {
        WxUtil wxUtil = this;
    }

    @Value("${common.wxBaseUrl}")
    public void setWxBaseUrl(String wxBaseUrl) {
        WxUtil.wxBaseUrl = wxBaseUrl;
    }

    public static String getWxInterfaceUrl(String address) {
        return wxBaseUrl.concat(address);
    }
}