<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[小彬的个人网站]]></title> 
<atom:link href="https://pgcloud.top/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[知叙小硕]]></description>
<link>https://pgcloud.top/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
    <title>RocketMQ报错解决</title>
    <link>https://pgcloud.top/?post=7</link>
    <description><![CDATA[<h1>SpringBoot中的报错问题：</h1>
<h2>第一段：</h2>
<pre><code>2025-12-22T14:27:22.092+08:00 ERROR 14636 --- [  XNIO-1 task-2] o.a.r.spring.core.RocketMQTemplate       : syncSend failed. destination:BANK_SHARE_CONFIRM_TOPIC, message:GenericMessage [payload=BankShareConfirmMessage(tenantId=1, origTransId=TID9D94392E5CE933FFEC5A, shareInfo=CP610000000000392568,10000;, msgId=SHR1766384836087), headers={id=33bb771e-7fcd-576f-e754-ed4d68d4755a, timestamp=1766384836087}], detail exception info: 

org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [6005]ms, Topic: BANK_SHARE_CONFIRM_TOPIC, BrokersSent: [broker-a, broker-a, broker-a]
See http://rocketmq.apache.org/docs/faq/ for further details.
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:647) ~[rocketmq-client-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1363) ~[rocketmq-client-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:352) ~[rocketmq-client-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.spring.core.RocketMQTemplate.syncSend(RocketMQTemplate.java:688) ~[rocketmq-spring-boot-2.2.3.jar:2.2.3]
    at com.joolun.cloud.media.api.controller.UserPayController.pay(UserPayController.java:416) ~[classes/:na]</code></pre>
<h2>第二段：</h2>
<pre><code>Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to 192.168.0.2:10911 failed
    at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:407) ~[rocketmq-remoting-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:521) ~[rocketmq-client-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:505) ~[rocketmq-client-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:449) ~[rocketmq-client-4.9.4.jar:4.9.4]
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:837) ~[rocketmq-client-4.9.4.jar:4.9.4]</code></pre>
<h1>解决方案：</h1>
<h2>1. <strong>停止现有的RocketMQ服务</strong></h2>
<pre><code class="language-bash">cd /mnt/rocketmq/rocketmq-5.3.2

# 停止Broker
sh bin/mqshutdown broker

# 停止NameServer
sh bin/mqshutdown namesrv

# 等待几秒确保进程停止
sleep 5

# 强制杀掉可能残留的进程
pkill -f mqnamesrv
pkill -f mqbroker</code></pre>
<h2>2. <strong>创建新的Broker配置</strong></h2>
<pre><code class="language-bash">cd /mnt/rocketmq/rocketmq-5.3.2

# 备份原配置
cp conf/broker.conf conf/broker.conf.backup.$(date +%Y%m%d)

# 创建新的broker.conf配置
cat &gt; conf/broker.conf &lt;&lt; 'EOF'
# 集群名称
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0

# 文件清理策略
deleteWhen = 04
fileReservedTime = 48

# 主从配置
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

# 代理配置（RocketMQ 5.x推荐）
enableProxy = true
proxyMode = local

# 关键：指定公网IP（你的云服务器IP）
brokerIP1 = 118.196.16.103

# 自动创建Topic（生产环境建议关闭）
autoCreateTopicEnable = true

# 监听端口（默认）
listenPort = 10911

# NameServer地址
namesrvAddr = 118.196.16.103:9876
EOF</code></pre>
<h2>3. <strong>创建启动脚本</strong></h2>
<pre><code class="language-bash"># 创建启动脚本
cat &gt; /mnt/rocketmq/start_rocketmq.sh &lt;&lt; 'EOF'
#!/bin/bash
ROCKETMQ_HOME=/mnt/rocketmq/rocketmq-5.3.2
LOG_DIR=/root/logs/rocketmqlogs

echo "创建日志目录..."
mkdir -p $LOG_DIR

echo "启动NameServer..."
cd $ROCKETMQ_HOME
nohup sh bin/mqnamesrv &gt; $LOG_DIR/namesrv.log 2&gt;&amp;1 &amp;

echo "等待NameServer启动..."
sleep 5

echo "启动Broker..."
export NAMESRV_ADDR=118.196.16.103:9876
nohup sh bin/mqbroker -n 118.196.16.103:9876 -c conf/broker.conf &gt; $LOG_DIR/broker.log 2&gt;&amp;1 &amp;

echo "等待Broker启动..."
sleep 8

echo "检查启动状态..."
echo "NameServer日志:"
tail -n 5 $LOG_DIR/namesrv.log

echo -e "\nBroker日志:"
tail -n 5 $LOG_DIR/broker.log

echo -e "\n进程状态:"
jps | grep -E 'NamesrvStartup|BrokerStartup'

echo -e "\n集群状态:"
sh bin/mqadmin clusterList -n 118.196.16.103:9876
EOF

# 给启动脚本执行权限
chmod +x /mnt/rocketmq/start_rocketmq.sh</code></pre>
<h2>4. <strong>创建停止脚本</strong></h2>
<pre><code class="language-bash"># 创建停止脚本
cat &gt; /mnt/rocketmq/stop_rocketmq.sh &lt;&lt; 'EOF'
#!/bin/bash
ROCKETMQ_HOME=/mnt/rocketmq/rocketmq-5.3.2

echo "停止RocketMQ服务..."

echo "停止Broker..."
cd $ROCKETMQ_HOME
sh bin/mqshutdown broker

echo "停止NameServer..."
sh bin/mqshutdown namesrv

echo "等待进程停止..."
sleep 3

echo "强制清理残留进程..."
pkill -f mqnamesrv 2&gt;/dev/null || true
pkill -f mqbroker 2&gt;/dev/null || true

echo "检查是否还有相关进程..."
ps aux | grep -E 'mqnamesrv|mqbroker' | grep -v grep

echo "RocketMQ已停止"
EOF

chmod +x /mnt/rocketmq/stop_rocketmq.sh</code></pre>
<h2>5. <strong>创建重启脚本</strong></h2>
<pre><code class="language-bash"># 创建重启脚本
cat &gt; /mnt/rocketmq/restart_rocketmq.sh &lt;&lt; 'EOF'
#!/bin/bash
echo "开始重启RocketMQ..."

# 停止服务
/mnt/rocketmq/stop_rocketmq.sh

# 等待一下
sleep 3

# 启动服务
/mnt/rocketmq/start_rocketmq.sh

echo "RocketMQ重启完成"
EOF

chmod +x /mnt/rocketmq/restart_rocketmq.sh</code></pre>
<h2>6. <strong>防火墙配置</strong></h2>
<pre><code class="language-bash"># 开放端口（CentOS/RHEL）
firewall-cmd --add-port=9876/tcp --permanent
firewall-cmd --add-port=10911/tcp --permanent
firewall-cmd --reload

# 或者Ubuntu/Debian
# ufw allow 9876/tcp
# ufw allow 10911/tcp
# ufw reload

# 查看开放的端口
firewall-cmd --list-ports</code></pre>
<h2>7. <strong>启动RocketMQ</strong></h2>
<pre><code class="language-bash"># 执行启动脚本
cd /mnt/rocketmq
./start_rocketmq.sh</code></pre>
<h2>8. <strong>验证服务状态</strong></h2>
<pre><code class="language-bash"># 检查端口监听
netstat -tlnp | grep -E '9876|10911'

# 检查进程
jps

# 检查集群状态
cd /mnt/rocketmq/rocketmq-5.3.2
sh bin/mqadmin clusterList -n 118.196.16.103:9876

# 测试Topic创建
sh bin/mqadmin updateTopic -n 118.196.16.103:9876 -t BANK_SHARE_CONFIRM_TOPIC</code></pre>
<h2>9. <strong>Spring Boot应用配置</strong></h2>
<p>在你的Spring Boot应用的 <code>application.yml</code> 中配置：</p>
<pre><code class="language-yaml">rocketmq:
  name-server: 118.196.16.103:9876
  producer:
    group: your-producer-group
    send-message-timeout: 10000
    # 重要：关闭VIP通道（云服务器必须）
    vip-channel-enabled: false
    # 设置重试次数
    retry-times-when-send-failed: 3</code></pre>
<h2>10. <strong>常用命令总结</strong></h2>
<h3>启动服务：</h3>
<pre><code class="language-bash">cd /mnt/rocketmq
./start_rocketmq.sh</code></pre>
<h3>停止服务：</h3>
<pre><code class="language-bash">cd /mnt/rocketmq
./stop_rocketmq.sh</code></pre>
<h3>重启服务：</h3>
<pre><code class="language-bash">cd /mnt/rocketmq
./restart_rocketmq.sh</code></pre>
<h3>查看日志：</h3>
<pre><code class="language-bash"># NameServer日志
tail -f /root/logs/rocketmqlogs/namesrv.log

# Broker日志
tail -f /root/logs/rocketmqlogs/broker.log</code></pre>
<h3>检查状态：</h3>
<pre><code class="language-bash">cd /mnt/rocketmq/rocketmq-5.3.2
# 查看进程
jps
# 查看集群
sh bin/mqadmin clusterList -n 118.196.16.103:9876</code></pre>
<h2>注意事项：</h2>
<ol>
<li><strong>云服务器安全组</strong>：确保在云控制台的安全组中开放 9876 和 10911 端口</li>
<li><strong>内存配置</strong>：如果内存不足，可以编辑 <code>bin/runbroker.sh</code> 调整 <code>-Xms</code> 和 <code>-Xmx</code> 参数</li>
<li><strong>磁盘空间</strong>：确保 <code>/mnt/rocketmq</code> 有足够的磁盘空间</li>
</ol>
<p>现在按照这个配置，你的RocketMQ应该能够正常工作了！</p>]]></description>
    <pubDate>Mon, 22 Dec 2025 14:46:16 +0800</pubDate>
    <dc:creator>知叙小硕</dc:creator>
    <guid>https://pgcloud.top/?post=7</guid>
</item>
<item>
    <title>.gitignore更新后不起作用</title>
    <link>https://pgcloud.top/?post=5</link>
    <description><![CDATA[<h1>.gitignore更新后需要刷新git</h1>
<h2>解决方案</h2>
<blockquote>
<p>我们应该先把本地的缓存删除，然后再进行push，操作步骤如下</p>
</blockquote>
<p><code>git rm -r --cached . // 删除本地缓存</code><br />
<code>git add . // 添加要提交的文件</code><br />
<code>git commit -m 'update .gitignore' // 更新本地的缓存</code></p>]]></description>
    <pubDate>Mon, 15 Dec 2025 10:23:59 +0800</pubDate>
    <dc:creator>知叙小硕</dc:creator>
    <guid>https://pgcloud.top/?post=5</guid>
</item>
<item>
    <title>rocketmq常规快速安装</title>
    <link>https://pgcloud.top/?post=4</link>
    <description><![CDATA[<h3>服务器硬件配置：</h3>
<p><strong>4核8G内存、4G剩余空间</strong>的机器配置。</p>
<h3>📋 完整的RocketMQ部署命令集</h3>
<p>以下是完善后的完整命令序列，可直接复制执行：</p>
<pre><code class="language-bash"># ==================== 1. 下载与解压 ====================
# 使用国内镜像下载（更快）
wget https://mirrors.bfsu.edu.cn/apache/rocketmq/5.3.2/rocketmq-all-5.3.2-bin-release.zip

# 安装unzip工具（如尚未安装）
sudo apt-get update &amp;&amp; sudo apt-get install -y unzip  # Ubuntu/Debian
# 或：sudo yum install -y unzip                        # CentOS/RHEL

# 解压到当前目录
unzip rocketmq-all-5.3.2-bin-release.zip

# 进入解压目录
cd rocketmq-all-5.3.2-bin-release/

# ==================== 2. 修改JVM内存设置 ====================
# 修改NameServer内存设置（调整为512m）
sed -i 's/-Xms4g -Xmx4g -Xmn2g/-Xms512m -Xmx512m -Xmn256m/g' bin/runserver.sh

# 修改Broker内存设置（调整为2g）
sed -i 's/-Xms8g -Xmx8g/-Xms2g -Xmx2g/g' bin/runbroker.sh
sed -i 's/-Xmn4g/-Xmn1g/g' bin/runbroker.sh

# ==================== 3. 设置永久环境变量 ====================
# 将NameServer地址添加到bash配置，避免每次手动设置
echo "export NAMESRV_ADDR=localhost:9876" &gt;&gt; ~/.bashrc
# 立即生效（仅当前终端）
source ~/.bashrc

# ==================== 4. 启动NameServer ====================
# 后台启动NameServer
nohup sh bin/mqnamesrv &amp;

# 查看启动日志，等待成功提示（约5-10秒）
echo "等待NameServer启动..."
tail -f ~/logs/rocketmqlogs/namesrv.log 2&gt;/dev/null | grep -q "boot success"

# 看到成功后按 Ctrl+C 退出日志查看
# 验证NameServer进程
jps -l | grep NamesrvStartup

# ==================== 5. 启动Broker（启用Proxy） ====================
# 后台启动Broker（指定NameServer地址并启用Proxy）
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &amp;

# 查看Proxy启动日志
echo "等待Broker启动..."
tail -f ~/logs/rocketmqlogs/proxy.log 2&gt;/dev/null | grep -q "boot success"

# 看到成功后按 Ctrl+C 退出
# 验证Broker进程
jps -l | grep BrokerStartup

# ==================== 6. 功能测试 ====================
# 测试消息发送（生产50条测试消息）
echo "开始生产者测试..."
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer &amp;
PRODUCER_PID=$!
sleep 10  # 等待生产者完成

# 测试消息消费（启动消费者）
echo "开始消费者测试..."
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer &amp;
CONSUMER_PID=$!
sleep 15  # 等待消费者消费消息

# 停止测试进程
kill $PRODUCER_PID $CONSUMER_PID 2&gt;/dev/null

# ==================== 7. 服务状态检查 ====================
echo "======= 服务状态检查 ======="
echo "1. Java进程列表："
jps -l | grep -E "NamesrvStartup|BrokerStartup"

echo -e "\n2. 端口监听情况："
netstat -tlnp | grep -E "9876|10911"  # NameServer和Broker端口

echo -e "\n3. 日志文件位置："
ls -lh ~/logs/rocketmqlogs/*.log | head -5

# ==================== 8. 停止服务命令（备用） ====================
# 停止Broker
# sh bin/mqshutdown broker

# 停止NameServer
# sh bin/mqshutdown namesrv

# 强制停止（如果上述命令无效）
# kill $(jps -l | grep -E "NamesrvStartup|BrokerStartup" | awk '{print $1}')</code></pre>
<h3>🔍 关键检查点与监控建议</h3>
<p>部署完成后，建议进行以下检查：</p>
<table>
<thead>
<tr>
<th>检查项</th>
<th>命令</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>进程状态</strong></td>
<td><code>jps -l</code></td>
<td>看到<code>NamesrvStartup</code>和<code>BrokerStartup</code>两个进程</td>
</tr>
<tr>
<td><strong>端口监听</strong></td>
<td><code>netstat -tlnp \| grep 9876</code></td>
<td>9876端口被NameServer监听</td>
</tr>
<tr>
<td><strong>日志错误</strong></td>
<td><code>tail -n 20 ~/logs/rocketmqlogs/proxy.log</code></td>
<td>无<code>ERROR</code>级别日志</td>
</tr>
<tr>
<td><strong>内存使用</strong></td>
<td><code>top -p $(jps \| grep -E "Namesrv\|Broker" \| awk '{print $1}' \| tr '\\n' ',')</code></td>
<td>进程内存占用正常</td>
</tr>
</tbody>
</table>
<h3>⚠️ 常见问题处理</h3>
<p>如果遇到启动失败，请检查：</p>
<ol>
<li><strong>端口冲突</strong>：确保9876、10911等端口未被占用</li>
<li><strong>内存不足</strong>：如机器有其他服务，可适当降低Broker内存至<code>-Xms1g -Xmx1g</code></li>
<li><strong>磁盘空间</strong>：Broker需要存储消息，确保有至少1-2G可用空间</li>
<li><strong>防火墙</strong>：本地测试一般无影响，生产环境需开放相应端口</li>
</ol>]]></description>
    <pubDate>Sun, 14 Dec 2025 09:54:49 +0800</pubDate>
    <dc:creator>知叙小硕</dc:creator>
    <guid>https://pgcloud.top/?post=4</guid>
</item>
<item>
    <title>MySQL备份</title>
    <link>https://pgcloud.top/?post=3</link>
    <description><![CDATA[<h2>一、RPM安装MySQL备份数据库</h2>
<h3>1.备份所有数据库数据（不含系统库）</h3>
<p>使用mysqldump导出所有业务数据库（排除mysql、sys、information_schema、performance_schema等系统库，这些后续单独处理权限）：</p>
<blockquote>
<p>mysqldump -u root -p --databases db1 db2 db3 ... &gt; /tmp/mysql_data_backup.sql</p>
</blockquote>
<p>若不确定数据库名，先登录本地 MySQL 查看：</p>
<blockquote>
<p>mysql -u root -p -e &quot;SHOW DATABASES;&quot;</p>
</blockquote>
<h3>2.恢复全部数据库数据</h3>
<p>恢复数据（另一个RPM安装的MySQL）：</p>
<blockquote>
<p>mysql8 mysql -u root -p你的root密码 &lt; /tmp/mysql_data_backup.sql</p>
</blockquote>
<p>恢复数据（Docker运行版）：</p>
<blockquote>
<p>docker exec -i mysql8 mysql -u root -p你的root密码 &lt; /tmp/mysql_data_backup.sql</p>
</blockquote>
<h2>二、备份用户数据和用户的权限数据：</h2>
<p>用navicat导出原始数据库mysql库下的user和和db数据，拿到insert的用户和权限数据以后，排除原始的系统用户和权限，插入其他用户数据和权限即可。</p>]]></description>
    <pubDate>Tue, 18 Nov 2025 09:38:08 +0800</pubDate>
    <dc:creator>知叙小硕</dc:creator>
    <guid>https://pgcloud.top/?post=3</guid>
</item>
<item>
    <title>腾讯云MySQL备份恢复</title>
    <link>https://pgcloud.top/?post=2</link>
    <description><![CDATA[<h1>数据库备份与恢复操作步骤</h1>
<h2>一、手动逻辑备份数据库并下载</h2>
<ol>
<li>登录腾讯云控制台，进入备份管理。</li>
<li>手动创建逻辑备份数据库，并下载备份文件，示例文件名：<code>data_backup_3584872_20250604214417.xb</code></li>
</ol>
<h2>二、在CentOS中安装解压工具</h2>
<pre><code class="language-bash">
# 安装 Percona YUM 源
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y

# 启用 tools 源
percona-release enable tools release

# 安装 xtrabackup
yum install percona-xtrabackup-80 -y</code></pre>]]></description>
    <pubDate>Sat, 15 Nov 2025 10:14:24 +0800</pubDate>
    <dc:creator>知叙小硕</dc:creator>
    <guid>https://pgcloud.top/?post=2</guid>
</item></channel>
</rss>