<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="https://dwt.life/feed/rss/tag/ha/">
<title>dwt&#039;s life - ha</title>
<link>https://dwt.life/tag/ha/</link>
<description></description>
<items>
<rdf:Seq>
<rdf:li resource="https://dwt.life/archives/195/"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="https://dwt.life/archives/195/">
<title>记录一次Mysql主从以及高可用操作【未完待续】</title>
<link>https://dwt.life/archives/195/</link>
<dc:date>2022-03-09T17:26:00+08:00</dc:date>
<description>之前托管的物理机组的Raid5出现了一块坏盘，介于最近的事情较多，暂时不打算对其做替换，不管硬盘是否可靠，数据备份也是必要的。之前本来是有做计划任务备份的，但是使用的宝塔面板并不支持排除某个数据库，只能选择所有，我有个裤子达到了60G，也懒得去修改宝塔自带的计划任务。因为出现事故第一时间是恢复业务，然而备份只能说是second choice，后续可能会对其进行修改来实现排除某些个数据库的功能。之前也做过主从，这次针对相关服务基于ipvs实现HA。拷贝数据用户添加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;;刷新并锁库flush tables with read lock;
show master status;File的值是当前使用的二进制日志的文件名，Position是该日志里面的位置信息（不需要纠结这个究竟代表什么），记住这两个值，会在下面配置从服务器时用到。注意：如果之前的服务器并没有配置使用二进制日志，那么使用上面的sql语句会显示空，在锁表之后，再导出数据库里的数据（如果数据库里没有数据，可以忽略这一步）导出数据mysqldump -uroot -p&#039;123456&#039; -S /tmp/mysql.sock --all-databases &gt; /www/server/backup/mysql_bak.$(date +%F).sql这里--all-databases会导出所有库，实际上我们并不希望如此，可使用xargs实现过滤。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如果数据量很大，可以在导出时就压缩为原来的大概三分之一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这时可以对数据库解锁，恢复对主数据库的操作unlock tables;配置主服务器[mysqld]

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

server-id=2
replicate-ignore-db=test
replicate-wild-do-table=test.%
# 忽略某些库注意上面的server-id的值都是可以改为其他值的（建议更改为ip地址的最后一个字段），如果没有上面的配置，首先关闭mysql服务器，然后添加上去，接着重启服务器如果有多个从服务器上，那么每个服务器上配置的server-id都必须不一致。从服务器上没必要配置log-bin，当然也可以配置log-bin选项，因为可以在从服务器上进行数据备份和灾难恢复，或者某一天让这个从服务器变成一个主服务器如果主服务器导出了数据，下面就导入该文件，如果主服务器没有数据，就忽略这一步[root@localhost ~]# mysql -uroot -p'123456' -S /tmp/mysql.sock &lt; /server/backup/mysql_bak.2022-03-09.sql如果从主服务器上拿过来的是压缩文件，就先解压再导入配置同步参数，登陆mysql，输入如下信息：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;启动主从同步进程start slave;检查状态show slave status \G上面的两个进程都显示YES则表示配置成功到此基本主从配置就完成了。需要注意的是，一旦主库发生重启、当机等情况，需要检测数据一致性后才能start slaveIPVS Keepalived配置关键服务部分服务是依赖其他服务进行改动的，所以当其他服务暂不可用的时候实际是不应影响这些服务的。所以需要组件一个小型的虚拟网络实现ipvs，或者是采用hosts的方式进行主机指定，但是并不适用于那些只允许ip的应用to be continue...参考MySQL主从复制mysqldump过滤数据库mysql主从配置忽略特定数据库mysql binlog 忽略和记录指定库</description>
</item>
</rdf:RDF>