首页
Search
1
欢迎使用 Typecho
25 阅读
2
MYSQL主从复制
21 阅读
3
Git的指令大全
16 阅读
4
Linux常用命令
16 阅读
5
自动剪辑视频精彩片段
13 阅读
全部
前端
后端
MYSQL
其他
登录
Search
小酒馆
累计撰写
7
篇文章
累计收到
1
条评论
首页
栏目
全部
前端
后端
MYSQL
其他
页面
搜索到
6
篇与
的结果
2025-11-20
javascript 数组从后面取第N个值
类似Python的arr[-1] // 取最后一位// 代理数组 可使用 arr[-1] 来获取最后一个元素Array.prototype.proxy = function(){return new Proxy(this, { get: (t, p, r) => Reflect.get(t, parseInt(p) < 0 ? t.length + parseInt(p) : p, r) });}var a = [1,2,3,4,5,6];var b = a.proxy();// 取最后1位var last1 = b[-1];console.log(last1); // 6// 取倒数第4位var last4 = b[-4];console.log(last4); // 3关于js中的Proxy及Reflect,找到相关的说明,正确与否不做辩解,也可自己去查阅相关js中的Proxy_拾玥花开的博客-CSDN博客_js proxyjs中的Reflect入门讲解_yunchong_zhao的博客-CSDN博客_js reflect
2025年11月20日
10 阅读
0 评论
0 点赞
2025-11-20
自动剪辑视频精彩片段
AutoClip的搭建项目地址:https://github.com/zhouxiaoka/autoclip.git本地部署操作系统: macOS / Linux / Windows (WSL)Python: 3.8+ (推荐 3.9+)Node.js: 16+ (推荐 18+)Redis: 6.0+ (推荐 7.0+)FFmpeg: 视频处理依赖内存: 最少 4GB,推荐 8GB+存储: 最少 10GB 可用空间创建Docker容器docker run -itd --name ubuntu-autoclip -p 3000:3000 -p 8000:8000 ubuntu查看容器IDdocker ps进入容器命令窗口docker exec -it 容器ID /bin/bash更新aptapt-get update安装Gitapt install -y git克隆项目cd /home # 目录位置随便git clone https://github.com/zhouxiaoka/autoclip.git进入项目cd autoclip安装python环境DEBIAN_FRONTEND=noninteractive apt install -y python3 python3.12-venvapt install -y python3选时区 默认全选1, 可自选安装虚拟环境要用apt install -y python3.12-venv创建虚拟环境python3 -m venv venv # 项目需要使用虚拟环境激活环境source ./venv/bin/activate安装pytz 获取projects接口报错 需要安装这个库pip install pytz安装Node使用nvm管理工具下载nvmcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash激活命令source ~/.bashrc安装最新版Nodenvm install node下载Redisapt install -y redis-server下载FFmpegapt install -y ffmpeg进入到前端文件安装不手动安装 运行程序,前端无法启动cd ./frontendnpm installnpm audit fixnpm audit fix --force退回cd ..增加.envcp env.example .env安装其他库source ./venv/bin/activatepip install openai-whisperpip install dashscopepip install openaipip install google-generativeai运行程序一键启动(推荐,包含完整检查和监控)./start_autoclip.sh快速启动(开发环境,跳过详细检查)./quick_start.sh检查系统状态./status_autoclip.sh停止系统./stop_autoclip.sh
2025年11月20日
13 阅读
0 评论
0 点赞
2025-11-20
Linux常用命令
一、文件与目录操作这是最基础也最常用的命令组,用于管理服务器上的文件和文件夹。ls:列出目录内容。ls -l:以长格式显示,包含权限、大小、修改时间等详细信息。ls -a:显示所有文件,包括以 “.” 开头的隐藏文件。cd:切换当前工作目录。cd /home:切换到/home目录。cd ..:切换到上一级目录。cd ~:切换到当前用户的家目录。pwd:显示当前工作目录的绝对路径。mkdir:创建新目录。mkdir test:创建名为test的目录。mkdir -p /a/b/c:递归创建多级目录,即使上级目录不存在。rm:删除文件或目录。rm file.txt:删除file.txt文件(需确认)。rm -f file.txt:强制删除文件,无需确认。rm -rf dir:强制递归删除目录及其所有内容,使用时务必谨慎。cp:复制文件或目录。cp file1.txt file2.txt:将file1.txt复制为file2.txt。cp -r dir1 dir2:递归复制dir1目录及其内容到dir2。mv:移动或重命名文件 / 目录。mv file1.txt /home:将file1.txt移动到/home目录。mv oldname.txt newname.txt:将oldname.txt重命名为newname.txt。二、系统信息查看用于了解服务器的硬件、系统版本、资源使用等状态。uname:查看系统内核信息。uname -r:显示内核版本,如3.10.0-1160.el7.x86_64。uname -a:显示完整的系统信息,包括内核、主机名、架构等。cat /etc/centos-release:查看 CentOS 的具体版本,如CentOS Linux release 7.9.2009 (Core)。free:查看内存使用情况。free -h:以人类可读的格式(如 GB、MB)显示内存信息。df:查看磁盘分区使用情况。df -h:以人类可读的格式显示各分区的容量、已用、可用空间。top:实时查看系统进程和资源占用(CPU、内存)。按q键退出top界面。ps:查看当前运行的进程。ps aux:显示所有用户的所有进程详细信息。三、用户与权限管理用于创建用户、分配权限,保障系统安全。useradd:创建新用户。useradd testuser:创建名为testuser的用户。passwd:设置或修改用户密码。passwd testuser:为testuser设置密码(输入时密码不显示)。userdel:删除用户。userdel testuser:删除testuser用户(默认不删除家目录)。userdel -r testuser:删除用户的同时,删除其家目录。chmod:修改文件或目录的权限。chmod 755 file.sh:设置file.sh的权限为所有者可读可写可执行,其他用户可读可执行。chmod +x file.sh:为file.sh添加执行权限。chown:修改文件或目录的所有者和所属组。chown testuser:testuser file.txt:将file.txt的所有者和所属组都改为testuser。四、软件包管理(YUM)CentOS 7 及以下默认使用 YUM 包管理器,用于安装、更新、卸载软件。yum install:安装软件包。yum install nginx:安装 Nginx 服务。yum update:更新软件包。yum update nginx:仅更新 Nginx。yum update:更新系统中所有可更新的软件包。yum remove:卸载软件包。yum remove nginx:卸载 Nginx 服务。yum list:列出已安装或可安装的软件包。yum list installed:列出所有已安装的软件包。yum search:搜索软件包。yum search redis:搜索与redis相关的软件包。五、服务管理(systemctl)CentOS 7 及以上使用systemctl管理系统服务,替代了传统的service命令。启动服务:systemctl start nginx停止服务:systemctl stop nginx重启服务:systemctl restart nginx查看服务状态:systemctl status nginx设置开机自启:systemctl enable nginx取消开机自启:systemctl disable nginx六、网络操作用于配置和查看服务器的网络信息。ifconfig:查看或配置网卡信息(部分系统需安装net-tools包)。ip addr:查看网卡 IP 地址(CentOS 7 及以上推荐使用)。ping:测试与目标主机的网络连通性。ping www.baidu.com:测试与百度的连通性,按Ctrl+C停止。netstat:查看网络连接状态(需安装net-tools包)。netstat -tuln:查看所有监听中的 TCP 和 UDP 端口。curl/wget:下载文件或测试 URL。curl www.baidu.com:获取百度首页的 HTML 内容。wget https://xxx.com/file.tar.gz:下载指定 URL 的文件。七、文件内容操作cat:查看文件内容(适合小文件)。cat file.txt:直接显示文件全部内容。cat -n file.txt:显示内容并带行号。more/less:分页查看大文件内容。more largefile.txt:按页显示,按空格翻页,q退出。less largefile.txt:支持上下滚动、搜索(输入/关键词查找,n下一个),更灵活。head/tail:查看文件开头或结尾内容。head -n 10 file.txt:显示文件前 10 行。tail -n 20 file.txt:显示文件后 20 行。tail -f /var/log/messages:实时跟踪文件新增内容(常用于查看日志,Ctrl+C退出)。grep:在文件中搜索关键词(强大的文本过滤工具)。grep "error" /var/log/nginx/error.log:在 Nginx 错误日志中搜索包含 “error” 的行。grep -i "Error" file.txt:忽略大小写搜索。grep -r "test" /home:递归搜索/home目录下所有文件中包含 “test” 的内容。sed:文本替换(非交互式编辑)。sed -i 's/old/new/g' file.txt:将文件中所有 “old” 替换为 “new”(-i直接修改原文件,谨慎使用)。touch:创建空文件或更新文件时间戳。touch newfile.txt:创建空文件。touch -d "2023-01-01" file.txt:修改文件的修改时间为指定日期。八、压缩与解压tar:打包 / 解压文件(常用与.tar、.tar.gz、.tar.bz2等格式)。打包并压缩为.tar.gz:tar -zcvf archive.tar.gz dir/(z用 gzip 压缩,c创建,v显示过程,f指定文件名)。解压.tar.gz:tar -zxvf archive.tar.gz(x解压)。解压.tar.bz2:tar -jxvf archive.tar.bz2(j用 bzip2 压缩)。zip/unzip:处理.zip格式。压缩:zip -r archive.zip dir/(-r递归压缩目录)。解压:unzip archive.zip(解压到当前目录)。查看压缩包内容:unzip -l archive.zip。gzip/gunzip:压缩 / 解压单个文件(仅支持.gz格式,会删除原文件)。压缩:gzip file.txt(生成file.txt.gz,删除file.txt)。解压:gunzip file.txt.gz(生成file.txt,删除file.gz)。九、进程管理进阶kill:终止进程(需知道进程 ID,可通过ps或top获取)。kill 1234:发送终止信号给 ID 为 1234 的进程(默认信号 15,优雅终止)。kill -9 1234:强制终止进程(信号 9,用于无法优雅终止的进程,谨慎使用)。pkill:按进程名终止进程。pkill nginx:终止所有名为nginx的进程。pgrep:按名称查找进程 ID。pgrep nginx:返回所有nginx进程的 ID。nohup:后台运行进程,断开终端后不终止。nohup ./script.sh &:后台运行script.sh,输出日志到nohup.out。nohup ./my_script.sh > my_log.log 2>&1 & 指定日志文件&:将命令放入后台运行(即使不加 nohup,& 也能让命令在后台运行,但终端关闭后会终止)。两者结合:实现 “后台运行 + 终端关闭不终止”。2>&1:将标准错误(stderr,如错误信息)也重定向到 my_log.log(与 stdout 合并)。nohup ./my_script.sh > /dev/null 2>&1 & 不输出日志文件十、磁盘与存储管理du:查看文件 / 目录占用的磁盘空间。du -sh /home:以人类可读格式显示/home目录总大小(s汇总,h人性化)。du -h --max-depth=1 /var:显示/var下一级子目录的大小。fdisk:磁盘分区管理(需 root 权限)。fdisk -l:列出所有磁盘及分区信息。fdisk /dev/sda:对/dev/sda磁盘进行分区操作(进入交互模式)。mount/umount:挂载 / 卸载文件系统。挂载 U 盘(假设设备为/dev/sdb1):mount /dev/sdb1 /mnt/usb。卸载:umount /mnt/usb(卸载前确保无程序使用该目录)。lsblk:查看磁盘分区布局(更直观的树形结构)。lsblk:列出所有块设备(磁盘、分区)的名称、大小、挂载点等。十一、系统日志与时间管理查看系统日志:/var/log/messages:系统通用日志(需 root 权限)。/var/log/secure:用户登录、权限相关日志(如 SSH 登录失败记录)。journalctl:CentOS 7 + 的日志管理工具(替代传统日志文件)。journalctl -u nginx:查看 Nginx 服务的日志。journalctl --since "1 hour ago":查看 1 小时内的日志。时间管理:date:显示当前系统时间。date -s "2025-10-24 15:30:00":手动设置系统时间(需 root)。timedatectl:查看 / 设置时区和时间同步。timedatectl set-timezone Asia/Shanghai:设置时区为上海。timedatectl set-ntp yes:开启网络时间同步(NTP)。十二、其他实用命令clear:清空终端屏幕(快捷键Ctrl+L也可)。history:查看历史命令记录。history | grep "yum":搜索包含 “yum” 的历史命令。!123:执行历史记录中第 123 条命令。ln:创建链接文件(类似 Windows 快捷方式)。软链接(推荐):ln -s /usr/local/bin/python3 /usr/bin/python(删除原文件后链接失效)。硬链接:ln file.txt file_link(与原文件共享 inode,删除原文件不影响链接)。scp:远程复制文件(基于 SSH)。本地到远程:scp localfile.txt user@remote_ip:/home/。远程到本地:scp user@remote_ip:/home/file.txt ./。ssh:远程登录服务器。ssh user@remote_ip:通过用户名 + IP 登录。ssh -p 2222 user@remote_ip:指定端口(默认 22)登录。查看端口netstat -tulnp | grep 8080查看进程ps aux | grep python
2025年11月20日
16 阅读
1 评论
0 点赞
2025-11-20
Git的指令大全
参考文章配置初始化操作 [config]$ git config -global user.name #设置提交者名字 $ git config -global user.email #设置提交者邮箱 $ git config -global core.editor #设置默认文本编辑器 $ git config -global merge.tool #设置解决合并冲突时差异分析工具 $ git config --list #检查已有的配置信息git config --global init.defaultBranch # 设置创建新版本库 [init]$ git clone #克隆远程版本库 $ git init #初始化本地版本库 $ git init --bare # 裸仓库必须加 --bare,否则无法接收 push修改和提交 [add/mv/rm/commit]$ git add . #添加所有改动过的文件 $ git add #添加指定的文件 $ git mv #文件重命名 $ git rm #删除文件 $ git rm -cached #停止跟踪文件但不删除 $ git commit -m #提交指定文件 $ git commit -m “commit message” #提交所有更新过的文件 $ git commit -amend #修改最后一次提交 $ git commit -C HEAD -a -amend #增补提交(不会产生新的提交历史纪录)查看提交历史 [log/status/diff]$ git log #查看提交历史 $ git log -p #查看指定文件的提交历史 $ git blame #以列表方式查看指定文件的提交历史 $ gitk #查看当前分支历史纪录 $ gitk #查看某分支历史纪录 $ gitk --all #查看所有分支历史纪录 $ git branch -v #每个分支最后的提交 $ git status #查看当前状态 $ git diff #查看变更内容撤消操作 [reset/checkout/revert]$ git reset -hard HEAD #撤消工作目录中所有未提交文件的修改内容 $ git checkout HEAD #撤消指定的未提交文件的修改内容 $ git checkout HEAD. #撤消所有文件 $ git revert #撤消指定的提交分支与标签 [branch/checkout/tag]$ git branch #显示所有本地分支 $ git checkout <branch/tagname> #切换到指定分支或标签 $ git branch #创建新分支 $ git branch -d #删除本地分支 $ git tag #列出所有本地标签 $ git tag #基于最新提交创建标签 $ git tag -d #删除标签合并与衍合 [merge/rebase]$ git merge #合并指定分支到当前分支 $ git rebase #衍合指定分支到当前分支远程操作 [remote/fetch/pull/push]$ git remote -v #查看远程版本库信息 $ git remote show #查看指定远程版本库信息 $ git remote add #添加远程版本库 $ git fetch #从远程库获取代码 $ git pull #下载代码及快速合并 $ git push #上传代码及快速合并 $ git push : / #删除远程分支或标签 $ git push -tags #上传所有标签
2025年11月20日
16 阅读
0 评论
0 点赞
2025-11-20
MYSQL主从复制
1. 环境主机地址端口号描述本机 (192.168.8.114)13306主本机 (192.168.8.114)23306从2. 授权外部访问use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedupdate user set Host='%' where user='root'; ERROR 1062 (23000): Duplicate entry '%-root' for key 'user.PRIMARY' // 不影响flush privileges;Query OK, 0 rows affected (0.00 sec)3. 异步主从文件位置:/etc/my.cnf1. 主机配置# [必选] 指定mysql唯一标识 server-id=1 # [可选] 指定binlog文件名称 log-bin=mysql-bin # [可选,建议填写] binlog的格式 (mixed/statement/row) binlog_format=mixed # [可选] 设置不要复制的数据库 binlog-ignore-db=mysql binlog-ignore-db=sys # [可选] 设置要复制的数据库 # binlog-do-db=需要复制的数据库 # binlog-do-db=需要复制的数据库2. 从机配置# [必选] 指定mysql唯一标识 server-id=2 # [可选] 指定binlog文件名称 # log-bin=mysql-bin # [可选] 配置中继日志 relay_log=mysql-slave-bin # [可选,建议填写] binlog的格式 (mixed/statement/row) binlog_format=mixed # [可选] 设置不要复制的数据库 # binlog-ignore-db=mysql # binlog-ignore-db=sys # [可选] 设置要复制的数据库 # binlog-do-db=需要复制的数据库 # binlog-do-db=需要复制的数据库[!IMPORTANT]修改配置后需要重启mysql服务3. 主机创建用户同步的账号CREATE USER 'salave1'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'salave1'@'%'; # 不加这句 后面需要加上一句 ALTER USER 'salave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; flush privileges;4. 查询主机Master状态show master status;记录File,PositionFilePositionBinlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Setmysql-bin.0000011150 mysql,sys 1 row in set (0.00 sec)[!WARNING]执行完后不要再操作主数据库5. 从机配置同步指令CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='主服务器用户名', MASTER_PORT='3306', # 默认3306不用填写 MASTER_PASSWORD='主服务器密码', MASTER_LOG_FILE='mysql-bin.xxxxx', MASTER_LOG_POS=XXX; # GET_SOURCE_PUBLIC_KEY=1; 如果不设置为mysql_native_password,则需要加上这句# 例如: CHANGE MASTER TO MASTER_HOST='192.168.8.114', MASTER_PORT=13306, MASTER_USER='salave1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1150;Query OK, 0 rows affected, 9 warnings (0.02 sec)启动start slave;Query OK, 0 rows affected, 1 warning (0.01 sec)停止#从库: stop slave; #主库: reset master;Query OK, 0 rows affected, 1 warning (0.01 sec)查看状态show slave status\G;需要保证下面两项为YesSlave_IO_Running: YesSlave_SQL_Running: Yes 1. row ** Slave_IO_State: Waiting for source to send event Master_Host: 192.168.8.114 Master_User: salave1 Master_Port: 13306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 1150 Relay_Log_File: mysql-slave-bin.000002 Relay_Log_Pos: 326 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1150 Relay_Log_Space: 536 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: e363fcec-96ca-11f0-8795-2a4e6aa1306f Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row in set, 1 warning (0.00 sec)ERROR: No query specified验证在主数据库中新增数据库/表/数据, 查看同步状态其他提示[!CAUTION]当从数据库新增数据有冲突后无法正常同步先查看状态查看输出中的这些字段,它们会告诉你SQL线程为什么停止:Last_SQL_ErrorLast_SQL_ErrnoLast_SQL_Error_Timestamp原因A:重复的主键或数据冲突STOP SLAVE; SET GLOBAL sql_replica_skip_counter = 1; START SLAVE; # 方法B:在配置文件中设置自动跳过重复键错误 #编辑 my.cnf 文件: #[mysqld] #replica_skip_errors = 1062原因B:从库上手动修改了数据导致冲突-- 重新初始化从库数据 STOP REPLICA; RESET REPLICA ALL; -- 重新导入主库的数据快照,然后重新配置复制原因C:表不存在或结构不一致-- 检查具体的错误信息,然后手动创建缺失的表预防措施为了避免未来的重复键错误:确保从库初始数据与主库一致避免手动在从库上修改数据使用GTID复制(可以更好地处理冲突)-- 在主库和从库上启用GTID [mysqld] gtid_mode = ON enforce_gtid_consistency = ON -- 然后使用自动定位 CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.8.114', SOURCE_PORT=13306, SOURCE_USER='master1', SOURCE_PASSWORD='123456', SOURCE_AUTO_POSITION = 1, GET_SOURCE_PUBLIC_KEY=1;4. 半同步主从(生成环境)文件位置:/etc/my.cnf1. 主机配置[mysqld] # 加载插件 plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" # [必选] 指定mysql唯一标识 server-id=1 # [可选] 指定binlog文件名称 log-bin=mysql-bin # 插件配置 rpl_semi_sync_master_enabled = 1 # 在master开启半同步模式 rpl_semi_sync_master_timeout = 1000 # 主机在某次事务中的等待时间, 默认10000ms 超时后降为异步同步 # [可选,建议填写] binlog的格式 (mixed/statement/row) binlog_format=mixed # [可选] 设置不要复制的数据库 binlog-ignore-db=mysql binlog-ignore-db=sys # [可选] 设置要复制的数据库 # binlog-do-db=需要复制的数据库 # binlog-do-db=需要复制的数据库2. 从机配置[mysqld] # 加载插件 plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" # [必选] 指定mysql唯一标识 server-id=2 # [可选] 指定binlog文件名称 # log-bin=mysql-bin # [可选] 配置中继日志 relay_log=mysql-slave-bin rpl_semi_sync_slave_enabled = 1 # [可选,建议填写] binlog的格式 (mixed/statement/row) binlog_format=mixed # [可选] 设置不要复制的数据库 # binlog-ignore-db=mysql # binlog-ignore-db=sys # [可选] 设置要复制的数据库 # binlog-do-db=需要复制的数据库 # binlog-do-db=需要复制的数据库# 查询插件状态 SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';3. 查询主机Master状态show master status;FilePositionBinlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Setmysql-bin.000002157 mysql,sys 1 row in set (0.00 sec)[!WARNING]执行完后不要再操作主数据库4. 从机配置同步指令CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='主服务器用户名', MASTER_PORT='3306', # 默认3306不用填写 MASTER_PASSWORD='主服务器密码', MASTER_LOG_FILE='mysql-bin.xxxxx', MASTER_LOG_POS=XXX; # GET_SOURCE_PUBLIC_KEY=1; 如果不设置为mysql_native_password,则需要加上这句# 例如: CHANGE MASTER TO MASTER_HOST='192.168.8.114', MASTER_PORT=13306, MASTER_USER='salave1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=157;Query OK, 0 rows affected, 9 warnings (0.02 sec)启动start slave;Query OK, 0 rows affected, 1 warning (0.01 sec)停止#从库: stop slave; #主库: reset master;Query OK, 0 rows affected, 1 warning (0.01 sec)查看状态show slave status\G;需要保证下面两项为YesSlave_IO_Running: YesSlave_SQL_Running: Yes 1. row ** Slave_IO_State: Waiting for source to send event Master_Host: 192.168.8.114 Master_User: salave1 Master_Port: 13306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 1150 Relay_Log_File: mysql-slave-bin.000002 Relay_Log_Pos: 326 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1150 Relay_Log_Space: 536 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: e363fcec-96ca-11f0-8795-2a4e6aa1306f Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row in set, 1 warning (0.00 sec)ERROR: No query specified验证在主数据库中新增数据库/表/数据, 查看同步状态5. 读写分离1. 引入时机大多数业务往往读多写少, 当达到业务瓶颈后, 需要使用到读写分离, 需要创建主从库, 主库用来写, 从库用来读主机: 写 , (读)从机: 读优化: 主库只写的话,可以不加索引,提升写的效率,从库增加多个索引读写分离架构可以消除读写锁的冲突从而提升数据库的读写性能但是需要注意:主从同步延时和读写分配机制的问题2. 主从同步延时优化方案:写后立刻读主库 (例如: 写入后5s从主库读, 之后从从库读)二次查询策略 (先从从库里面读, 读不到再去主库里读)业务特殊处理 (实时性要求高的放主库里读写, 次要业务全部从从库读)3. 落地基于编程实现 (应用层)优点: 灵活, 规则可自定义;缺点: 有入侵性, 多个从机选择规则(随机/权重/轮询),需要自定义基于数据库代理实现(数据网关)目前性能不错的数据库中间件MySQL Proxy:官方提供的MySQL中间件,实现负载均衡、读写分离等MyCat:阿里云开源CobarShardingSphere:Atlas:6. MySQL-Proxy的使用官网下载地址1. 复制到容器中docker cp E:\Downloads\mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz 4c7981af5e1e:/home2. 容器中解压tar -xvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz3. 配置mysql-proxytouch /etc/mysql-proxy.cnf vi /etc/mysql-proxy.cnf[mysql-proxy] user=root # 运行用户 admin-username=root # 主库从库的账户名 admin-password=root # 主库从库的密码 log-level=debug # 日志级别 从高到底 (error|warning|info|message|debug) log-file=/var/log/mysql-proxy.log proxy-address=127.0.0.1:4040 # 运行端口, 默认4040 proxy-backend-addresses=192.168.8.144:13306 #,192.168.8.114:13307 # 指定后端主机Master写入数据,多个用,隔开,下同 proxy-read-only-backend-addresses=192.168.8.114:23306 # 指定后端从salve读取数据 proxy-lua-script=/home/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua admin-lua-script=/home/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/admin-sql.lua daemon=true # 是否采用后台模式运行 keepalive=true # 当mysql-proxy崩溃时尝试重启使用中不建议加入中文注释,以下是简版[mysql-proxy] user=root admin-username=root admin-password=root log-level=debug log-file=/var/log/mysql-proxy.log proxy-address=127.0.0.1:4040 proxy-backend-addresses=192.168.8.144:13306 proxy-read-only-backend-addresses=192.168.8.114:23306 proxy-lua-script=/home/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua admin-lua-script=/home/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/admin-sql.lua daemon=true keepalive=true[!CAUTION]rw-splitting.lua 中 设置了最小达到4个连接数的时候才开启读写分离, 测试时可做修改vim /home/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua找到if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 4, max_idle_connections = 8, is_debug = false }end将min_idle_connections 设置为14. 相关命令cd /home/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin lsmysql-binlog-dump mysql-myisam-dump mysql-proxy5. 启动服务命令./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf #./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf --daemon ## 或使用后台模式 #nohup ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf > /var/log/mysql-proxy.log 2>&1 &6. 查询是否启动1. 查看日志cat /var/log/mysql-proxy.log2. 查看进程ps -ef | grep mysql
2025年11月20日
21 阅读
0 评论
0 点赞
1
2