数据库集群架构一般如下
一主多从
主从同步
读写分离
主从同步有延时,就可能读到脏数据
解决方案有四种
- 忽略,如果业务上能接受
- 半同步复制,主库写数据之后,等待binlog 同步之后才返回请求,但是明显写请求延时会增加
- 强制读主, 强大的主库 + 缓存, 从库只用来进行数据备份
- 选择性读主库,写的时候,把库+表+key 写到缓存,超时设置为数据同步时长,查询的时候先查这个组合是否在写,如果在写,则强制读主库,否则可以读从库。
数据库集群架构一般如下
一主多从
主从同步
读写分离
主从同步有延时,就可能读到脏数据
解决方案有四种
碰到一个无语的bug,调了半天…
一切正常,没有server 错,没有cors 错, 如图
但是就是没有数据
折腾,折腾,再折腾…
回滚到线上版本还是不行,奇了怪了
不卖关子啦,原来我开的地址是: 127.0.0.1
但是 在cors 的白名单里面,配的是localhost
改过来就正常了…
黑群的文件突然不能用了,修了半天没搞定,所有就想自己搭建文件服务器,这样家里所有的电脑都能连上,好处
方便在不同设备上共享传输
存储空间大
主要其实就是搭建一个Samba 服务器
安装 Samba:在终端输入sudo apt-get update
更新软件源,然后输入sudo apt-get install samba
安装 Samba 服务器软件
创建用户组和用户:
sudo groupadd smbgroup
sudo useradd -M -G smbgroup richardmiao
sudo smbpasswd -a richardmiao #这是samb的密码,跟Ubuntu系统不共享
创建共享文件夹:
sudo mkdir -p /srv/shared
sudo chown nobody:nogroup /srv/shared
sudo chmod 775 /srv/shared
配置 Samba:输入sudo nano /etc/samba/smb.conf
打开配置文件,在文件底部添加共享相关配置
# 公共只读共享
[public]
path = /srv/shared
comment = Public Share
browseable = yes
read only = yes
guest ok = yes
create mask = 0644
directory mask = 0755
# 可写共享(需要用户名密码)
[private]
path = /srv/shared
comment = Private Share
browseable = yes
read only = no
valid users = @smbgroup
force group = smbgroup
create mask = 0660
directory mask = 0770
writable = yes
保存退出 Nano, ctrl + o => enter => ctrl + x
启动与设置开机自启:启动 Samba 服务器,再设置开机自启动
sudo systemctl restart smbd
sudo systemctl status smbd # 检查服务状态
sudo systemctl enable smbd
测试
\\192.168.8.110\public
或 \\192.168.8.110
\private
smb://服务器IP/public
不出所料,没成功,public 可以访问,private 再输入用户名密码之后报错
服务测试,通过 服务器上运行,检查服务是OK的
smbclient //localhost/private -U richardmiao
进入下面的交互界面,就说明服务是OK的
windows 端检查
Windows 会缓存与 Samba 服务器的连接会话,若之前用不同凭据连过,可能冲突。
打开凭据管理,删除所有这个地址值下的凭据,找到 Windows 凭据 中与 192.168.8.110
相关的条目,删除,还是不行呀
Samba 与 Windows 的 SMB 协议版本可能不兼容,导致权限判断异常。
Win+R
→ 输入 gpedit.msc
回车,Win 家庭版需手动安装);4. 按 Win+S
搜索 启用或关闭 Windows 功能, 找到并勾选「SMB 1.0/CIFS 文件共享支持」
结果来啦
映射到磁盘方便使用
话说,黑群里的资料咋整回来…
目标:把代码部署到腾讯云的vm(ubuntu)上
时间花费:差不多两天
结果:终于成了
下面是坑和填坑的故事:
自定义的CI 只能使用Jenkins, 连自带的构建框架都不能选,然后很多配置跟原生的Jenkins还不一样…
凭证的配置在开发者选项里面
需要配置数据库密码和SSH 私钥,藏得很深
Jenkins 不支持ssh-keygen 生成的OpenSSH私钥,需要通过ssh-keygen 命令转化成PEM
ssh-keygen -p -m PEM -f /path/to/your/private_key -P “” -N “”
私钥公钥的一些事情
哪里生成,可以本地生成,也可以线上生成(比如Ubuntu)
一个是私钥 – 不带.pub 的文件,要用在本地和Coding的Jenkins上
一个是公钥 – 带.pub的文件,需要注册到服务器上,可以用命令,也可以手动
ssh-copy-id username@remote_host
手动则需要把私钥拷贝到~/.ssh/authorized_keys
ssh 一个超级有用的参数 -v(verbose mode), 用来查看ssh的连接情况,判断哪里可能除了问题
ssh -v username@remote_host # 基本详细模式
ssh -vv username@remote_host # 更详细的输出
ssh -vvv username@remote_host # 最详细的调试输出
另一个大坑是腾讯云的帐户,轻量级服务器的默认登录是lighthouse,不是ubuntu,这个坑要注意两点:
a.注意用户权限,尤其是应用部署目录的
b. 注意私钥,公钥的位置
node环境如果选择any,他会给你一个老古董
可以通过指定dokcer agent 来使用高版本的node
agent {
docker {
reuseNode 'true'
registryUrl 'https://coding-public-docker.pkg.coding.net'
image 'public/docker/nodejs:18'
}
}
后面再补吧~
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address = 0.0.0.0 # 允许所有 IP 连接(云环境常用)
# 或 bind-address = <云服务器公网IP> # 仅允许通过公网IP连接
# mysqlx-bind-address 不需要改,这个是为 X Protocal(33060)定义的
8. 重启MySQL
sudo systemctl restart mysql
9. 查看是否生效
# 查看端口监听情况(需安装 net-tools)
netstat -tulpn | grep 3306
预期输出:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld
(若显示 127.0.0.1:3306,说明修改未生效,需检查配置文件)
10. 开始测试
出现了 出现 Public Key Retrieval is not allowed
错误
这通常与 MySQL 8.0+ 的加密认证方式有关。MySQL 8.0 默认使用 caching_sha2_password
插件,需要通过公钥进行密码验证,而某些客户端(如 JDBC、Navicat)默认禁用了自动获取公钥的功能
找到驱动属性,如下使用DBeaver为例, 修改为True,测试成功
如果是代码,需要在connect string上增加下面的属性,
allowPublicKeyRetrieval=true&useSSL=true&requireSSL=true
以nodejs 为例
好了,收工~
线上的AI虽然好用,但是你的数据会共享出去,如果使用AI API,价格很贵,搭建云上自有的AI服务器,服务器又很贵,于是有了
云端 nginx,配置了反向代理, 本地通过nodejs 包装了deepseek r1/v3服务
在本地机器上通过SSH 连接 本地和远端,命令如下
ssh -R 8888:localhost:8888 ubuntu@129.211.63.154
测试结果:
细节稍后补充…