小星的编程笔记

  • Win11 右下角时间显示到秒

    PowerShell 版本:
    
    Set-ItemProperty `
        -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" `
        -Name ShowSecondsInSystemClock `
        -Type DWord `
        -Value 1
    
    然后重启资源管理器生效。
  • 防止终端执行乱码

    终端执行需要加上如下代码
    
    [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

  • ubuntu24安装mysql 8.0.46

    1.更新系统软件包
    在安装前,建议先更新系统的软件包列表以确保获取最新的软件信息:

    sudo apt update
    sudo apt upgrade -y


    2. 安装 MySQL 8.0
    执行以下命令安装 MySQL 服务器(Ubuntu 24 默认仓库提供的 MySQL 版本即为 8.0):

    sudo apt install mysql-server -y


    3. 启动服务并设置开机自启
    安装完成后,MySQL 服务通常会自动启动。为确保万无一失,可以手动启动并设置开机自启:

    sudo systemctl start mysql
    sudo systemctl enable mysql
    sudo systemctl restart mysql
    


    4. 检查 MySQL 运行状态
    确认 MySQL 是否成功运行:

    sudo systemctl status mysql


    当看到 Active: active (running) 时,说明服务已正常运行。
    5. 登录并设置 Root 密码
    Ubuntu 默认安装的 MySQL 没有设置 root 密码,且仅允许本地验证登录。直接回车即可登录:

    sudo mysql -u root -p


    登录成功后,执行以下 SQL 语句为 root 用户设置强密码(请将 ‘你的新密码’ 替换为你自己的密码):
    完成后输入 quit; 退出。

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
    FLUSH PRIVILEGES;



    6. 运行安全配置向导(可选但推荐)
    MySQL 提供了安全配置脚本,可以帮助你移除匿名用户、禁止 root 远程登录、删除测试数据库等:

    sudo mysql_secure_installation


    7. 配置远程访问(可选)
    如果你需要从其他机器远程连接该数据库,需要进行以下两步配置:
    修改配置文件: 编辑 MySQL 配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,找到 bind-address 并将其修改为允许所有 IP 访问:

    bind-address = 0.0.0.0


    授权远程用户: 登录 MySQL 后,为 root 用户(或新建用户)开启远程访问权限:

    默认没有密码  设置新密码 兼容老系统
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass@123';
    
    GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '你的新密码' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    创建一个用于xiaoxing 授权ip 192.168.1.%  可以访问 my_database 数据库所有信息。
    
    -- 推荐:创建专用用户(不要用 root!)
    CREATE USER 'xiaoxing'@'192.168.1.%' IDENTIFIED BY '你的密码';
    
    -- 授予所需权限(例如所有数据库,或指定库)
    GRANT ALL PRIVILEGES ON my_database.* TO 'xiaoxing'@'192.168.1.%';
    
    -- 刷新权限
    FLUSH PRIVILEGES;
    查看所有的用户
    
    select user,host,plugin from mysql.user;
    
    +---------------+-----------+
    | User          | host      |
    +---------------+-----------+
    | mysql.session | localhost |
    | mysql.sys     | localhost |
    | root          | localhost |
    +---------------+-----------+
    3 rows in set (0.00 sec)
    
    #允许任意ip访问mysql
    UPDATE mysql.user SET host = '%' WHERE user = 'root';
    
    
    创建一个数据库test
    
    CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
    show databases;
    use test;
    show tables;


    重启服务并开放防火墙: 修改配置后需重启 MySQL 服务(sudo systemctl restart mysql)。如果系统开启了防火墙,还需开放 3306 端口:sudo ufw allow 3306/tcp。

    避坑提示:关于表名大小写在 Linux 下默认安装的 MySQL 是严格区分表名和数据库名大小写的。如果你的业务代码没有严格区分大小写,建议在安装完、初始化数据之前,修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 下添加 lower_case_table_names=1 来关闭大小写敏感。注意:此参数必须在数据库初始化前配置,否则可能导致 MySQL 无法启动。

    如何修改mysql 数据库目录

    配置文件里面端口和数据库文件存放位置
    # port		= 3306
    # datadir	= /var/lib/mysql
    
    
    # 先停掉 MySQL
    systemctl stop mysql
    
    # 复制数据(-a 保留权限、所有者等)
    cp -a /var/lib/mysql/. /data1/mysql/
    
    # 或者用 rsync
    # rsync -av /var/lib/mysql/ /data1/mysql/
    
    chown -R mysql:mysql /data1/mysql/
    chmod 750 /data1/mysql          # 目录权限 750 足够,内部文件会自动继承之前的权限

    修改mysql 数据库文件目录后 需要 配置 AppArmor(最容易被忽略的一步)

    Ubuntu/Debian 的 AppArmor 默认只允许 MySQL 访问 /var/lib/mysql,访问新路径 /data1 会被拦截,报 Permission denied

    # 编辑 MySQL 的 AppArmor 配置

    vim /etc/apparmor.d/usr.sbin.mysqld

    找到类似以下两行(通常在文件靠前位置):

    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,

    在它们下面添加两行针对新路径的规则:

    /data1/mysql/ r,
    /data1/mysql/** rwk,

    保存退出后,重新加载 AppArmor 规则:

    systemctl restart apparmor


    忘记密码如何操作

    先停止mysqld57 / mysql8 服务
    
    windows启动超级模式
    
    .\mysqld.exe --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" --skip-grant-tables --console
    
    直接
    mysql -uroot  
    进去操作
    
    查看 root 用户认证方式
    
    SELECT user,host,plugin FROM mysql.user;
    
    
    -------------------------------------------------------------
    
    linux  类似操作
    sudo systemctl stop mysql
    
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    或者
    sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &
    
    如果提示
    Directory '/var/run/mysqld' for UNIX socket file don't exists.
    
    sudo mkdir -p /var/run/mysqld
    sudo chmod 755 /var/run/mysqld
    sudo chown -R mysql:mysql /var/run/mysqld
    在执行   sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking &
    
    查看 root 用户认证方式
    
    SELECT user,host,plugin FROM mysql.user;
    
    MySQL 8 在 --skip-grant-tables 下不能直接改密码,需要先执行:  mysql5.7 无视
    FLUSH PRIVILEGES;
    
    
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    FLUSH PRIVILEGES;
    
    ps -ef | grep mysqld
    
    sudo kill -9 PID   停掉刚刚的mysql
    
    或者
    sudo pkill mysqld
    sudo pkill mysqld_safe
    
    sudo systemctl start mysql

    创建用户

    CREATE USER 'root'@'223.93.145.203' IDENTIFIED WITH mysql_native_password BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'223.93.145.203';
    FLUSH PRIVILEGES;
    
    #创建指定用户 指定ip访问
    CREATE USER 'scan'@'120.26.168.246' IDENTIFIED WITH mysql_native_password BY '你的密码';
    #授权指定用户 访问 scan_cookies 这个数据库
    GRANT ALL PRIVILEGES ON scan_cookies.* TO 'scan'@'120.26.168.246';
    FLUSH PRIVILEGES;
    
    
    ALTER USER 'root'@'223.93.145.203' IDENTIFIED WITH mysql_native_password BY 'MyPassword@123';
    ALTER USER 'root'@'120.26.168.246' IDENTIFIED WITH mysql_native_password BY 'MyPassword@123';
    FLUSH PRIVILEGES;
    
    
  • VSCode 中即使已设置 Python 虚拟环境,仍出现波浪线解决办法

    在 VSCode 中即使已设置 Python 虚拟环境,仍出现波浪线(通常是 Pylance 语言服务器的“未解析导入”警告),这并非代码错误,而是静态分析工具未能正确识别当前解释器所对应的包路径。以下是系统性的解决方案:


    ✅ 第一步:确认并选择正确的 Python 解释器

    这是最常见的原因。VSCode 可能默认使用了全局 Python 或其他环境,而非你期望的虚拟环境。

    1. 按 Ctrl + Shift + P 打开命令面板。
    2. 输入并选择 Python: Select Interpreter
    3. 在弹出的列表中,找到你的虚拟环境路径(通常包含 .venvvenv 或 env 等字样)。
      • 例如:.venv\Scripts\python.exe (Windows) 或 .venv/bin/python (macOS/Linux)
    4. 选中它,VSCode 右下角状态栏会显示当前选中的解释器路径。

    💡 如果列表中没有你的虚拟环境,说明 VSCode 没有自动扫描到它。你可以点击 “Enter interpreter path…” 手动输入完整路径。


    ✅ 第二步:重启语言服务器以刷新缓存

    有时即使选择了正确的解释器,Pylance 仍会缓存旧的路径信息。

    1. 按 Ctrl + Shift + P
    2. 输入并执行 Developer: Reload Window
    3. 等待几秒,让 VSCode 重新加载并初始化语言服务器。
  • windows多个版本的python如何切换版本

    方法一:

    打开 PowerShell,输入以下命令打开配置文件(如果文件不存在会自动创建):

    notepad $PROFILE
    
    注:如果提示系统找不到指定路径 运行一下就好了
    New-Item -Path $PROFILE -ItemType File -Force

    在打开的记事本中添加以下代码:

    Set-Alias python3.11 "C:\Program Files\Python311\python.exe"
    Set-Alias python3.9 "C:\Program Files\Python39\python.exe"
    Set-Alias pip3.11 "C:\Program Files\Python311\Scripts\pip3.11.exe"
    Set-Alias pip3.9 "C:\Program Files\Python39\Scripts\pip3.9.exe"
    

    方法二:python自带的 官方的启动器 py.exe(位于 C:\Windows\py.exe)

    # 运行脚本
    py -3.11 script.py
    py -3.9 script.py
    
    #安装包
    py -3.11 -m pip install <包名>
    py -3.9 -m pip install <包名>

    更新pip包

    python3.11 -m pip install –upgrade pip

    python3.9 -m pip install –upgrade pip

    PS初始化powershell 设置

    notepad $PROFILE
    
    输入一下内容保存
    
    chcp 65001 | Out-Null
    [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
    $OutputEncoding = [System.Text.UTF8Encoding]::new()
    $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
    $PSDefaultParameterValues['Set-Content:Encoding'] = 'utf8'
    $PSDefaultParameterValues['Add-Content:Encoding'] = 'utf8'
    $Host.UI.RawUI.WindowTitle = "PowerShell"
    Write-Host ""
    Write-Host "PowerShell $($PSVersionTable.PSVersion)" -ForegroundColor Green
    Write-Host "CodePage : $(chcp.com | Select-Object -First 1)" -ForegroundColor Cyan
    Write-Host "InputEncoding  : $([Console]::InputEncoding.WebName)" -ForegroundColor Yellow
    Write-Host "OutputEncoding : $([Console]::OutputEncoding.WebName)" -ForegroundColor Yellow
    Write-Host ""
    Set-Alias python3.11 "C:\Program Files\Python311\python.exe"
    Set-Alias python3.9 "C:\Program Files\Python39\python.exe"
    Set-Alias pip3.11 "C:\Program Files\Python311\Scripts\pip3.11.exe"
    Set-Alias pip3.9 "C:\Program Files\Python39\Scripts\pip3.9.exe"
    function prompt {
        $time = Get-Date -Format "MM-dd HH:mm:ss"
        Write-Host "[$time]" -ForegroundColor Cyan -NoNewline
        " PS $($executionContext.SessionState.Path.CurrentLocation)> "
    }

    Python设置国内源

    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
    
    https://mirrors.aliyun.com/pypi/simple/

    创建python 虚拟环境 并为提示符设置颜色

    python3.11 -m venv venv
    
    找到 ./venv/bin/activate
    
    
    if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
        _OLD_VIRTUAL_PS1="${PS1:-}"
        PS1='(venv) '"${PS1:-}"
        export PS1
        VIRTUAL_ENV_PROMPT='(venv) '
        export VIRTUAL_ENV_PROMPT
    fi
    
    修改提示符  venv 为绿色 更为显眼
    
    PS1='\[\033[1;32m\](venv)\[\033[0m\] '"${PS1:-}"
    
    退出虚拟环境
    deactivate
    
    推荐使用命令一键替换   PS1='(venv)   找到这一行直接替换
    
    sed -i "/PS1='(venv)/c\    PS1='\\\[\\\\033[1;32m\\\](venv)\\\[\\\\033[0m\\\] '\"\${PS1:-}\"" ./venv/bin/activate

  • ubuntu24.04安装 各个版本的python

    sudo add-apt-repository ppa:deadsnakes/ppa
    
    sudo apt update
    
    sudo apt install python3.9 python3.9-venv python3.9-dev
    
    sudo apt install python3.11 python3.11-venv python3.11-dev
    
    python3.9 --version
    
    python3.11 --version
    
    python3.12 --version

    国内无法安装可以使用

    --------------------------------------------------------
    方案一:使用 uv(推荐,最快)
    
    如果你的目的是创建 Python 3.9/3.11 虚拟环境,推荐使用 uv。
    
    安装:
    
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    然后:
    source $HOME/.local/bin/env
    
    uv python install 3.9
    uv python install 3.11
    
    不过,这也需要能够访问国外网络。如果服务器没有代理,就不适合。
    创建虚拟环境
    uv venv --python 3.9 .venv
    uv venv --python 3.11 .venv
    
    进入虚拟环境重新安装一下pip  否则可能没有pip包
    python -m ensurepip --upgrade
    
    如果太慢  换一下源
    
    mkdir -p ~/.pip
    
    cat > ~/.pip/pip.conf <<EOF
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    trusted-host = pypi.tuna.tsinghua.edu.cn
    timeout = 60
    EOF
    
    cat > ~/.pip/pip.conf <<EOF
    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple/
    trusted-host = mirrors.aliyun.com
    timeout = 60
    EOF
    
    
    --------------------------------------------------------
    
    
    方案二:源码编译(推荐给服务器)
    
    直接下载源码(国内镜像):
    
    例如华为云:
    
    wget https://mirrors.huaweicloud.com/python/3.9.23/Python-3.9.23.tgz
    
    或者 3.11:
    
    wget https://mirrors.huaweicloud.com/python/3.11.13/Python-3.11.13.tgz
    
    然后:
    
    tar xf Python-3.9.23.tgz
    cd Python-3.9.23
    
    ./configure --enable-optimizations
    make -j$(nproc)
    sudo make altinstall
    
    安装完成后:
    
    python3.9 --version

  • ubuntu 设置密钥登录

    1. 在本地生成密钥对

    在本地电脑上执行(Windows/Mac/Linux 都可以):

    ssh-keygen -t ed25519 -C "1111222@qq.com"

    按提示操作:

    • 保存位置:直接回车(默认 ~/.ssh/id_ed25519
    • 密码:可以设置密码增加安全性,或直接回车留空
    • Enter file in which to save the key (C:\Users\Administrator/.ssh/id_ed25519):
    • Enter passphrase (empty for no passphrase):
    • Enter same passphrase again:

    旧系统兼容性:如果服务器不支持 ed25519,改用 RSA:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

    2. 将公钥复制到服务器

    先查看本地公钥内容:

    在 C:\Users\Administrator\.ssh\id_ed25519.pub

    登录服务器,将公钥追加到授权文件:

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    #很短的一行的公钥信息 包含邮箱的  私钥证书一样的用于本地连接用 可以设置密码
    echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

    3. 配置 SSH 服务(增强安全性)

    sudo vim /etc/ssh/sshd_config
    # 禁用密码登录(确认能用密钥登录后再设置!)
    PasswordAuthentication no
    
    # 禁用 root 密码登录(如需允许 root 密钥登录,设为 prohibit-password)
    PermitRootLogin prohibit-password
    
    # 禁用空密码
    PermitEmptyPasswords no
    
    # 启用公钥认证
    PubkeyAuthentication yes

    注意:保存后,一定要先验证配置是否正确(非常重要!):

    sudo sshd -t

    如果没有错误输出,重启 SSH 服务:

    ubuntu
    sudo systemctl restart ssh
    
    
    centos
    sudo systemctl restart sshd   

    4 客户端 FinalShell 登录 选择私钥 位置

    C:\Users\Administrator.ssh\id_ed25519

  • mysql安全的添加索引

    ALTER TABLE app_member_ext
    ADD INDEX idx_uid (uid),
    ALGORITHM=INPLACE, LOCK=NONE;

    对于InnoDB引擎的普通索引

    • ALGORITHM=INPLACE:不会全表复制,只修改元数据和填充索引页
    • LOCK=NONE:允许并发读写,不会阻塞DML操作
    • 结论:可以在线执行,不会导致业务中断

    注意. 主键索引不支持

    如何安全的重命名 表

    RENAME TABLE
    table1 TO table1_backup_20260509,
    table1_copy1 TO table1;
    
    假设有  table1_copy1  完全复制 table1  结构和数据
    先将  table1  改为  table1_backup_20260509
    然后将  table1_copy1  重命名为 table1   完成。
    
    原子性:MySQL 会锁住字典,确保在重命名期间不会有新的查询进来。当语句执行完毕,所有后续的查询都会指向新的表(即原来的 copy1)。
    
    回滚简单:如果新表有问题,你可以马上执行反向操作,把名字换回来,数据零损失。

  • git常用命令

    1.将本地代码推送到远程空仓库

    设置远程仓库的地址
    git remote set-url origin https://codeup.aliyun.com/123456/sph/sph_crawler.git
    
    推送并绑定master分支
    git push -u origin master
    
    强制推送 覆盖远程
    git push -f origin master
    
    

    常用的gitignore文件

    # Python
    # 字节编译的 Python 文件
    __pycache__/
    *.py[cod]
    *$py.class
    *.so
    .Python
    
    # 虚拟环境
    venv/
    env/
    .venv/
    ENV/
    
    # 编辑器
    # VS Code
    .vscode/
    *.code-workspace
    
    # PyCharm
    .idea/
    *.iml
    *.ipr
    *.iws
    
    # 其他编辑器
    *.swp
    *.swo
    *~
    .DS_Store
    
    # 日志目录
    logs/
    *.log
    
    # 环境配置文件
    .env
    .env.example
    
    # 其他
    *.egg-info/
    dist/
    build/
    .pytest_cache/
    .coverage
    htmlcov/
    
  • Cursor使用

    1 、如何关闭多余的工作区

    ctrl+w 关闭

    2、打开或关闭终端显示

    Ctrl+` (tab上面的反引号)

    3、修改标题栏的颜色

    Ctrl + Shift + P
    → Preferences: Open User Settings (JSON)

    打开用户设置

    "workbench.colorCustomizations": {
            "titleBar.activeBackground": "#3c5985",       // 深灰色
            "titleBar.activeForeground": "#fffb00",       // 橙黄色
            "titleBar.inactiveBackground": "#008000",     // 绿色
            "titleBar.inactiveForeground": "#FF8C00"      // 橙色
        }

    4自动补全头文件

    1 自动补全头文件
    
    
    001 按 Ctrl + Shift + P
    
    002 输入 Preferences: Configure User Snippets
    
    选择 python.json
    
    {
    	"Python File Header": {
    	  "prefix": "pyhd",
    	  "body": [
    		"# -*- coding: utf-8 -*-",
    		"\"\"\"",
    		"-------------------------------------------------",
    		"   File Name:     ${TM_FILENAME}",
    		"   Description :   $1",
    		"   Author :        Xiaoxing",
    		"   date:          ${CURRENT_YEAR}/${CURRENT_MONTH}/${CURRENT_DATE}  ${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}",
    		"-------------------------------------------------",
    		"\"\"\""
    	  ],
    	  "description": "Auto generate Python file header"
    	},
    
    	"a main guard": {
        "prefix": "main2",
        "body": [
          "if __name__ == '__main__':",
          "   pass"
        ],
        "description": "Insert Python main guard"
      }
    
    }

    5 实现 ctrl+d 复制本行到下一行

    按下 Ctrl + Shift + P 打开命令面板。
    输入并选择 Preferences: Open Keyboard Shortcuts (JSON)

    首选项:打开键盘快捷方式 (JSON)


    在打开的 keybindings.json 文件的中括号 [] 里,添加以下代码并保存:

    {
            "key": "ctrl+d",
            "command": "editor.action.copyLinesDownAction",
            "when": "editorTextFocus"
        }