<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>dwt&#039;s life - ha</title>
<link>https://dwt.life/tag/ha/</link>
<atom:link href="https://dwt.life/feed/tag/ha/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Wed, 09 Mar 2022 17:26:00 +0800</lastBuildDate>
<pubDate>Wed, 09 Mar 2022 17:26:00 +0800</pubDate>
<item>
<title>记录一次Mysql主从以及高可用操作【未完待续】</title>
<link>https://dwt.life/archives/195/</link>
<guid>https://dwt.life/archives/195/</guid>
<pubDate>Wed, 09 Mar 2022 17:26:00 +0800</pubDate>
<dc:creator>Ricky</dc:creator>
<description><![CDATA[之前托管的物理机组的Raid5出现了一块坏盘，介于最近的事情较多，暂时不打算对其做替换，不管硬盘是否可靠，数据备份也是必要的。之前本来是有做计划任务备份的，但是使用的宝塔面板并不支持排除某个数据...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>之前托管的物理机组的Raid5出现了一块坏盘，介于最近的事情较多，暂时不打算对其做替换，<br>不管硬盘是否可靠，数据备份也是必要的。之前本来是有做计划任务备份的，但是使用的宝塔面板并不支持排除某个数据库，只能选择所有，我有个裤子达到了60G，也懒得去修改宝塔自带的计划任务。因为出现事故第一时间是恢复业务，然而备份只能说是second choice，后续可能会对其进行修改来实现排除某些个数据库的功能。<br>之前也做过主从，这次针对相关服务基于ipvs实现HA。</p><h1>拷贝数据</h1><h2>用户添加</h2><pre><code>grant replication slave on *.* to &#039;rep&#039;@&#039;81.69.%&#039; identified by &#039;123&#039;;
grant replication slave on *.* to &#039;rep&#039;@&#039;81.69.%&#039; identified by &#039;123&#039;;</code></pre><h2>刷新并锁库</h2><pre><code>flush tables with read lock;
show master status;</code></pre><p><img src="https://pic.8oh.com.cn/cos/2022/03/09/7b2a845b03a13_1646815909.png" alt="185.png" title="185.png"></p><p>File的值是当前使用的二进制日志的文件名，Position是该日志里面的位置信息（不需要纠结这个究竟代表什么），记住这两个值，会在下面配置从服务器时用到。</p><p>注意：如果之前的服务器并没有配置使用二进制日志，那么使用上面的sql语句会显示空，在锁表之后，再导出数据库里的数据（如果数据库里没有数据，可以忽略这一步）</p><h2>导出数据</h2><pre><code>mysqldump -uroot -p&#039;123456&#039; -S /tmp/mysql.sock --all-databases &gt; /www/server/backup/mysql_bak.$(date +%F).sql</code></pre><p>这里<code>--all-databases</code>会导出所有库，实际上我们并不希望如此，可使用xargs实现过滤。</p><pre><code>mysql -S /tmp/mysql.sock -uroot -p&#039;123456&#039; -e &quot;show databases;&quot; | grep -Ev &quot;Database|information_schema|mysql|test&quot; | xargs mysqldump -uroot -p&#039;123456&#039; --databases &gt; /www/server/backup/mysql_bak.$(date +%F).sql</code></pre><p>如果数据量很大，可以在导出时就压缩为原来的大概三分之一</p><pre><code>mysql -S /tmp/mysql.sock -uroot -p&#039;123456&#039; -e &quot;show databases;&quot; -uroot -p| grep -Ev &quot;Database|information_schema|mysql|test&quot; | xargs mysqldump -uroot -p&#039;123456&#039; --databases | gzip &gt; /www/server/backup/mysql_bak.$(date +%F).sql</code></pre><p>这时可以对数据库解锁，恢复对主数据库的操作</p><p><code>unlock tables;</code></p><h1>配置主服务器</h1><pre><code>[mysqld]

log-bin=mysql-bin
skip-slave-start
server-id=1
binlog-ignore-db=test
# 不记录某个库的binlog</code></pre><p>注意上面的log-bin和server-id的值都是可以改为其他值的，如果没有上面的配置，首先关闭mysql服务器，然后添加上去，接着重启服务器</p><h1>配置从服务器</h1><p>首先检查从服务器上的my.cnf文件中是否已经在[mysqld]模块下配置server-id</p><pre><code>[mysqld]

server-id=2
replicate-ignore-db=test
replicate-wild-do-table=test.%
# 忽略某些库</code></pre><p>注意上面的server-id的值都是可以改为其他值的（建议更改为ip地址的最后一个字段），如果没有上面的配置，首先关闭mysql服务器，然后添加上去，接着重启服务器</p><p>如果有多个从服务器上，那么每个服务器上配置的server-id都必须不一致。从服务器上没必要配置log-bin，当然也可以配置log-bin选项，因为可以在从服务器上进行数据备份和灾难恢复，或者某一天让这个从服务器变成一个主服务器</p><p>如果主服务器导出了数据，下面就导入该文件，如果主服务器没有数据，就忽略这一步</p><p>[root@localhost ~]# mysql -uroot -p'123456' -S /tmp/mysql.sock &lt; /server/backup/mysql_bak.2022-03-09.sql<br>如果从主服务器上拿过来的是压缩文件，就先解压再导入</p><p>配置同步参数，登陆mysql，输入如下信息：</p><pre><code>mysql&gt; CHANGE MASTER TO
MASTER_HOST=&#039;ip地址&#039;,
MASTER_USER=&#039;rep&#039;,
MASTER_PASSWORD=&#039;rep密码&#039;,
MASTER_LOG_FILE=&#039;mysql-bin.000019&#039;,
MASTER_LOG_POS=120;</code></pre><p>启动主从同步进程<br><code>start slave;</code><br>检查状态<br><code>show slave status \G</code><br><img src="https://pic.8oh.com.cn/cos/2022/03/09/9ce173abdfec8_1646817601.png" alt="186.png" title="186.png"><br>上面的两个进程都显示YES则表示配置成功</p><p>到此基本主从配置就完成了。<br>需要注意的是，一旦主库发生重启、当机等情况，需要检测数据一致性后才能start slave</p><h1>IPVS Keepalived配置关键服务</h1><p>部分服务是依赖其他服务进行改动的，所以当其他服务暂不可用的时候实际是不应影响这些服务的。<br>所以需要组件一个小型的虚拟网络实现ipvs，或者是采用hosts的方式进行主机指定，但是并不适用于那些只允许ip的应用</p><p>to be continue...</p><h1>参考</h1><p><a href="https://www.cnblogs.com/kylinlin/p/5258719.html">MySQL主从复制</a><br><a href="https://www.cnblogs.com/hllnj2008/p/5206449.html">mysqldump过滤数据库</a><br><a href="https://blog.csdn.net/chenxun1522/article/details/100717163">mysql主从配置忽略特定数据库</a><br><a href="https://blog.csdn.net/weixin_34109408/article/details/92607977">mysql binlog 忽略和记录指定库</a></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://dwt.life/archives/195/#comments</comments>
<wfw:commentRss>https://dwt.life/feed/tag/ha/</wfw:commentRss>
</item>
</channel>
</rss>