配置MySQL主从,配置MySQL主主 +keeplive高可用

news2024/9/21 0:36:36

在大数据-Hadoop体系中

配置MySQL主主+keeplive高可用

注意:这个是我两年前的word文档,可以当作参考文档有个思路参考一下,但是里面可能有些地方有误

另外 :关于一些企业级实战技术可以参考这篇mysql 物理备份 MySQL 全量备份 增量备份 差异备份 日志备份万字长文 1.3万字-CSDN博客文章浏览阅读899次,点赞26次,收藏25次。版权声明:本文为博主原创文章,遵循版权协议,转载请附上原文出处链接和本声明注意,通常 完备增备,日志(binlog)备,结合使用 差异则根据具体情况选用。此备份过程属于公司 常用的单个数据库备份技术中的mysql 物理备份 MySQL 全量备份 增量备份 差异备份 日志备份至于单个数据库备份技术中的逻辑备份和混合数据库及其备份技术,本人会另外开文章再进行说明https://blog.csdn.net/qq_61414097/article/details/141228466

另外,我当年参考了这几位老哥的文档

1,Mysql—主从、主主、主备模式 - 掘金 (juejin.cn)

https://juejin.cn/post/7205007227560509497

2,mysql配置主从数据库(超简单)

https://juejin.cn/post/7205007227560509497

MySQL主主数据同步_mysql主主同步-CSDN博客

3.

史上最简单keepalived安装教程(亲测可用并实际应用于生产)_yum keepalived_Elon的随笔的博客-CSDN博客

前言

高可用性和故障转移的方式?

采用哪些不同的方法来实现高可用性和故障转移?

以下是实现高可用性和故障转移的常见方法:

1. 主从复制:使用一个主服务器和多个从服务器来复制数据并提供冗余功能。如果主服务器发生故障,一个从服务器可以成为新的主服务器,并继续提供服务。

2. 负载均衡器:使用专用硬件设备或软件来平衡负载并确保故障转移。这些设备可以检测服务器状态,并在需要时将请求路由到其他可用服务器上。

3. 集群:使用多个服务器来提供同一应用程序,并且在其中任何一个节点发生故障时,应用程序可以继续运行。集群包括多种类型,例如高可用性集群、负载均衡集群和容器编排集群等。

4. DNS轮询: 使用DNS服务器返回不同的IP地址来平衡负载。如果其中一个服务器发生故障,DNS服务器可以将请求路由到另一个服务器上。

5. 容器编排:使用像Kubernetes、Docker Swarm或Apache Mesos等容器编排和管理工具来处理应用程序容器的高可用性和故障转移。这些工具可以自动检测故障并重新启动容器,并在需要时将它们迁移到其他节点上。

需要注意的是,以上方法都有自己的优点和限制,因此您需要根据您的应用程序需求和基础架构环境选择最适合您的解决方案。同时,在使用任何一种方法之前,请务必备份所有相关数据,并小心地测试和验证您的配置以确保它们可靠和稳定。

采用MySQL主主+keeplived并配置DNS轮询和负载均衡来实现高可用性和故障转移

由于我的应用程序需要使用多个IP地址依赖于其他网络资源(例如DNS记录网络数据,云数据存储等等),则可能需要采用不同的方法来实现高可用性和故障转移

因此,我在Hadoop集群中配置有关keepalived的DNS轮询和负载均衡除此之外,我还采用了MySQL主主+keeplived的方式完成实现高可用性和故障转移。

原理:Mysql—单点、主主、主备主从模式原理

1,图示:MySQL单点、双主(主主) 、主备、主从架构方案思路

2,思路:文字MySQL双主(主主)架构方案思路是:

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;
2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;
3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);
4.所有提供服务的从服务器与masterB进行主从同步(双主多从);
5.建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);

这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力;

但是也有几个不足的地方:

1.masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询);
2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会造成一定程度的同步延时;

架构的简易图如下:

​编辑

  1. 配置ip
  2. 配置yum源
  3. 配置Hadoop
  4. 配置MySQL

一、添加 yum 源

1.1 下载 MySQL 5.7 的 rpm 包:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

1.2 安装 rpm 包:

sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm

安装完毕后,会在 /etc/yum.repos.d/ 目录下生成两个 Repo 文件:

mysql-community.repo

mysql-community-source.repo

二、安装 MySQL

2.1 执行 yum 安装命令:

sudo yum install mysql-server

在安装过程中,会有提示确认信息,一般一路输入 y 即可。

如果出现以下错误,意味着在安装 MySQL 5.7 时,缺少公钥文件。

请尝试使用以下命令导入 MySQL 的 GPG 密钥,并重新执行安装命令:

sudo rpm --import http://repo.mysql.com/RPM-GPG-KEY-mysql-2022

这将为您导入 MySQL 的 GPG 密钥,作为验证 MySQL 资源的一种方式。

如果看到以下输出,则表明安装成功:

Complete!

三、启动 MySQL

3.1 启动 MySQL:

systemctl start mysqld

3.2 查看 MySQL 状态:

systemctl status mysqld

3.3 重启 MySQL:

systemctl restart mysqld

3.4 停止 MySQL:

systemctl stop mysqld

3.5 设置开机启动:

systemctl enable mysqld

systemctl daemon-reload

四、登录 MySQL

4.1 获取 root 用户在首次登录时生成的临时密码:

grep 'temporary password' /var/log/mysqld.log

命令的输出会显示 root 用户在首次登录时生成的临时密码。例如:

[Note] A temporary password is generated for root@localhost: eKgLclnYq1;K

其中 eKgLclnYq1;K 就是临时密码。

4.2 登录 MySQL:

mysql -u root -p

通过上述命令登录 MySQL 后,需要修改 root 用户的临时密码,否则会在执行部分命令时提示错误,例如执行 show databases 命令,会出现以下错误信息:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

4.3 修改 root 用户密码:Password123$ 或 P@ssword123

ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssword123';

其中,新密码 是您设置的新密码。请注意,MySQL 密码策略要求密码长度大于 8 个字符,包含大小写字母、数字及其它字符(如标点符号)。

注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误,如下图所示:

通过msyql环境变量可以查看密码策略的相关信息:

mysql> show variables like '%password%';

注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误,如下图所示:

通过msyql环境变量可以查看密码策略的相关信息:

mysql> show variables like '%password%';

4.4 查询 及修改禁用MySQL 密码策略:

SHOW VARIABLES LIKE 'validate_password%';

命令的输出将会显示 MySQL 密码策略规则,包括密码长度、大小写字母、数字及其它字符的要求等。例如:

validate_password_policy:密码策略,默认为MEDIUM策略
validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
validate_password_length:密码最少长度
validate_password_mixed_case_count:大小写字符长度,至少1个
validate_password_number_count :数字至少1个
validate_password_special_char_count:特殊字符至少1个
上述参数是默认策略MEDIUM的密码检查规则。

这意味着,密码长度必须大于 8 个字符,且密码中必须包含大小写字母、数字及至少一个特殊字符,如 !@#$ 等。请根据实际情况设置新密码。

修改密码策略

在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略

# 选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件

validate_password_policy=0

如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:

validate_password = off

重新启动mysql服务使配置生效:

systemctl restart mysqld

4.5 检查mysql源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

表示安装成功

4.6如果MySQL5.7无法远程连接

则,添加远程登录用户以便于远程MySQL,,若还是无法连接,可能CentOS7还要开启MySQL远程访问

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接

我们需要增加root允许其他主机进行连接,执行下面这段语句:123456为连接密码,%为任意主机,就是任意主机可以通过用户名root + 密码12345 进行连接,你也可以指定只允许某IP的主机进行连接。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'P@ssword123';

 执行完上面的语句之后还不会立即生效,还需要让mysql重新加载用户权限:

flush privileges;

或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'yangxin'@'%' IDENTIFIED BY 'Yangxin0917!' WITH GRANT OPTION;

flush privileges;

可以用任意一台电脑的navicat进行连接了,如果还是无法连接,检查是否防火墙屏蔽了mysql端口的远程访问权限

如果是

CentOS7开启MySQL远程访问

CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样。按如下方便配置防火墙:

1、关闭防火墙:sudo systemctl stop firewalld.service

2、关闭开机启动:sudo systemctl disable firewalld.service

3、安装iptables防火墙

执行以下命令安装iptables防火墙:sudo yum install iptables-services

  1. 配置iptables防火墙,打开指定端口

(和CentOS6一样开放MySQL访问端口3306)

修改防火墙配置文件

vi /etc/sysconfig/iptables 

加入端口配置     

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

重新加载规则

service iptables restart  

5、设置iptables防火墙开机启动:sudo systemctl enable iptables

6、之后的和CentOS6一样修改mysql库里的host

登录mysql;mysql -uroot -p

use mysql;

update user set host='%' where user='root' and host='localhost';

记得一定还得修改密码,因为这时密码已失效,虽然本地还可以原密码登录,可远程改了host后还是没法访问

UPDATE user SET password=password("root") WHERE user='root'; 

flush privileges;

重启mysql,远程就可以访问了

service mysqld restart;

完整的 MySQL 5.7 安装和登录教程到此结束。

mysql主从复制简

1,slave1和slave2安装mysql数据库已完成

1、主从服务器分别作以下操作:

  1.1、版本一致

  1.2、初始化表,并在后台启动mysql

  1.3、修改root的密码

2、修改主服务器master:

   #vi /etc/my.cnf

       [mysqld]

       log-bin=mysql-bin   //[必须]启用二进制日志

       server-id=222      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

3、修改从服务器slave:

   #vi /etc/my.cnf

       [mysqld]

       log-bin=mysql-bin   //[不是必须]启用二进制日志

       server-id=226      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

2-3详细版配置

 #vi /etc/my.cnf

# mysqld.cnf

 [client]

# 客户端设置编码字符集为UTF8mb4

default_character_set=utf8mb4

[mysqld]

# 服务端设置编码

default-storage-engine=INNODB

character-set-server=utf8mb4

collation-server=utf8mb4_general_ci

# 服务唯一ID

server-id=9000

# 配置bin-log信息

# 日志文件名

log-bin=master-bin log_bin_index = master-bin.index

# 日志格式

binlog_format=row

# 日志保存天数

expire-logs-days=7

# 需要同步的数据库

#binlog-do-db=cm_sync

# 不需要同步的库

binlog-ignore-db=mysql

binlog-ignore-db=sys

binlog-ignore-db=information_schema binlog-ignore-db=performance_schema

主从配置除了id(server-id以外其余一样

4、重启两台服务器的mysql

   /etc/init.d/mysql restart

5、在主服务器上建立帐户并授权slave:

   #/usr/local/mysql/bin/mysql -uroot -pmttang  

   mysql>GRANT REPLICATI ON SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

6、登录主服务器的mysql,查询master的状态

   mysql>show master status;

   +------------------+----------+--------------+------------------+

   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

   +------------------+----------+--------------+------------------+

   | mysql-bin.000004 |      308 |              |                  |

   +------------------+----------+--------------+------------------+

   1 row in set (0.00 sec)

   注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave:

  

mysql>change master to master_host='192.168.145.222',master_user='mysync',master_password='q123456',

         master_log_file='mysql-bin.000004',master_log_pos=308;   //注意不要断开,308数字前后无单引号。

   Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

   mysql> show slave status\G

   *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event

              Master_Host: 192.168.2.222  //主服务器地址

              Master_User: mysync   //授权帐户名,尽量避免使用root

              Master_Port: 3306    //数据库端口,部分版本没有此行

              Connect_Retry: 60

              Master_Log_File: mysql-bin.000004

              Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos

              Relay_Log_File: ddte-relay-bin.000003

              Relay_Log_Pos: 251

              Relay_Master_Log_File: mysql-bin.000004

              Slave_IO_Running: Yes    //此状态必须YES

              Slave_SQL_Running: Yes     //此状态必须YES

                    ......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,主从服务器配置完成。

9、主从服务器测试:

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

  mysql> create database hi_db;

  Query OK, 1 row affected (0.00 sec)

  mysql> use hi_db;

  Database changed

  mysql>  create table hi_tb(id int(3),name char(10));

  Query OK, 0 rows affected (0.00 sec)

  mysql> insert into hi_tb values(001,'bobu');

  Query OK, 1 row affected (0.00 sec)

  mysql> show databases;

   +--------------------+

   | Database           |

   +--------------------+

   | information_schema |

   | hi_db                |

   | mysql                |

   | test                 |

   +--------------------+

   4 rows in set (0.00 sec)

从服务器Mysql查询:

   mysql> show databases;

   +--------------------+

   | Database               |

   +--------------------+

   | information_schema |

   | hi_db                 |       //I'M here,大家看到了吧

   | mysql                 |

   | test          |

   +--------------------+

   4 rows in set (0.00 sec)

   mysql> use hi_db

   Database changed

   mysql> select * from hi_tb;           //查看主服务器上新增的具体数据

   +------+------+

   | id   | name |

   +------+------+

   |    1 | bobu |

   +------+------+

   1 row in set (0.00 sec)

  1. 完成编写shell脚本,用nagios监控slave的两个yes Slave_IO及Slave_SQL进程

用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。

mysql主

要在Hadoop集群中实现MySQL主主复制,您可以遵循以下步骤:

1. 在Hadoop集群中安装两个以上相同版本的MySQL数据库,确保两个MySQL服务器都正常运行。

2. 配置MySQL的主主复制。这需要在每个MySQL服务器上进行以下配置更改:

   - 在my.cnf(或my.ini)文件中启用二进制日志记录(binlog),并且给它一个唯一的名称。

vi /etc/my.cnf

     ```

     server-id=1

     log-bin=mysql-bin

     ```

   - 确保每个MySQL服务器都已正确配置了replication用户名和密码。

     ```

     grant replication slave on *.* to 'repl'@'%' identified by 'password';

     ```

Repl 用户名可修改为自己的, password密码可修改为自己的

3. 记下第一个MySQL服务器的IP地址,并使用该地址在第二个MySQL服务器上设置主服务器。

   ```

   CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=xxxx;

   ```

   其中`MASTER_LOG_FILE`和`MASTER_LOG_POS`参数应设置为第一个MySQL服务器上的binlog文件名和位置。

4. 现在,在两个MySQL服务器上都启用复制。

   ```

   start slave;

   ```

5. 测试MySQL主主复制是否正常工作。您可以执行一些插入、更新或删除操作,并确保它们在两个MySQL服务器之间同步。

请注意,以上步骤仅提供了一个简单的概述。在实践中,您可能会遇到其他问题和挑战,例如网络延迟、数据冲突等。因此,在进行任何更改之前,请务必备份所有相关数据,并仔细测试您的MySQL主主复制配置

mysql主主详细

## 配置MySQL主主同步

0配置防火墙以允许MySQL服务器之间的通信。

您需要开放MySQL服务器使用的TCP端口(默认为3306),并且最好只允许从其他MySQL服务器的IP地址访问该端口。

安装iptables防火墙:

sudo yum install iptables-services

配置iptables防火墙,打开指定端口

修改防火墙配置文件

vim /etc/sysconfig/iptables 

加入端口配置     

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

重新加载规则(centos7命令)

systemctl stop iptables.service  开启服务

[root@slave2 ~]# systemctl start iptables.service   关闭服务

[root@slave2 ~]# systemctl restart iptables.service  刷新重启服务

 关闭防火墙

service iptables stop

设置iptables防火墙开机启动:

sudo systemctl enable iptables

查看iptables防火墙状态

systemctl status iptables.service

0.1配置selinux

永久关闭selinux

shell> vi /etc/selinux/config

SELINUX=disabled

临时关闭selinux

运行以下命令来检查当前Selinux状态:

sestatus

如果当前正在运行Selinux,则可以使用以下命令暂时禁用它:

setenforce 0

您可以再次使用sestatus命令来验证Selinux状态是否已更改为“Permissive”。

sestatus

输出应显示为:

SELinux status:                 disabled

或者

SELinux status:                 permissive

请注意,这种方法只会临时禁用Selinux,重启后将重新启动。如果您需要永久禁用Selinux,则必须修改配置文件并重新启动系统以使更改生效。在永久禁用 Selinux 前,建议您先了解其对系统安全的影响,并采取其他措施来保护您的系统。

  1. 在Hadoop集群中安装两个以上相同版本的MySQL数据库,确保两个MySQL服务器都正常运行。

注意: 

主从服务器操作系统版本如centos7.6和位数要保持一致

多个数据库的版本要保持一致

多个数据库中的数据要保持一致

多个数据库中的server-id=242或243不要要保持一致

2. 配置MySQL的主主复制。这需要在每个MySQL服务器上进行以下配置更改:

 在my.cnf(或my.ini)文件中启用二进制日志记录(binlog),并且给它一个唯一的名称。

vi /etc/my.cnf

     ```

     server-id=1

     log-bin=mysql-bin

     ```

 在`my.cnf`文件中启用二进制日志记录(binlog)和GTID功能。

   ```

   server-id = 1

   log_bin = /var/log/mysql/mysql-bin.log

   binlog_format = ROW

   gtid_mode = ON

   enforce_gtid_consistency = ON

   ```

   这将启用MySQL的全局事务标识符(GTID)功能,并确保在主服务器之间进行复制时不会出现数据冲突。

   - 确保每个MySQL服务器都已正确配置了replication用户名和密码。

     ```

     grant replication slave on *.* to 'repl'@'%' identified by 'password';

     ```

Repl 用户名可修改为自己的, password密码可修改为自己的

#vi /etc/my.cnf

# mysqld.cnf

 [client]

# 客户端设置编码字符集为UTF8mb4

default_character_set=utf8mb4

[mysqld]

# 服务端设置编码

default-storage-engine=INNODB

character-set-server=utf8mb4

collation-server=utf8mb4_general_ci

# 服务唯一ID

server-id=9000 

# 配置bin-log信息,开启二进制日志功能,名字可以随便取,最好有含义(比如项目名)

log-bin=master-bin

# 日志文件名

log_bin_index = master-bin.index

# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 

binlog_cache_size=8M

# 日志格式

# 主从复制的格式(mixed,statement,row,默认格式是 statement) 

binlog_format=row

# 日志保存天数   过期自动删除,默认值为 0,表示不自动删除 

expire-logs-days=30 

#下面很关键

# 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。

# 如:1062错误是指一些主键重复,1032 错误是因为主从数据库数据不一致

slave_skip_errors=1062

# 作为从服务器时的中继日志 

relay_log=edu-mysql-relay-bin

# log_slave_updates 表示 slave 将复制事件写进自己的二进制日志

log_slave_updates=1

# 主键自增规则如下两个,避免主从同步ID重复的问题

# 自增因子(每次加2)

auto_increment_increment=2  

# 自增偏移(从1开始),单数

auto_increment_offset=1

# 启用MySQL的全局事务标识符(GTID)功能,

# 并确保在主服务器之间进行复制时不会出现数据冲突。

gtid_mode = ON

enforce_gtid_consistency = ON

# 需要同步的数据库

#binlog-do-db=cm_sync

# 不需要同步的库 复制过滤:不需要备份的数据库(MySQL库一般不同步)

binlog-ignore-db=mysql

binlog-ignore-db=sys

binlog-ignore-db=information_schema binlog-ignore-db=performance_schema 

  1. Mysql主主快捷操作

参考文档MySQL主主数据同步_mysql主主同步_xyang0917的博客-CSDN博客https://blog.csdn.net/xyang81/article/details/52562571

Mysql1服务器和Mysql2服务器均进行

# 先重启一下服务

shell> service mysqld restart

# 分别登录到mysql1 和2

shell> mysql -uroot -p

P@ssword123

 # 创建数据库同步用户,并授予相应的权限 只允许repl用户从192.168.xxx.xxx上登录)

# 只允许repl用户从192.168.148.130上登录, 此主机ip为192.168.148.129

Mysql1> grant replication slave, replication client on *.* to 'repl'@'192.168.148.130' identified

by 'P@ssword123';

# 只允许repl用户从192.168.148.129 上登录, 此主机ip为192.168.148.130 

# 也可使用'repl'@'192.168.148.%' 只允许repl用户从192.168.148.xxx上登录

Mysql2> grant replication slave, replication client on *.* to 'repl'@'192.168.148.129' identified

by 'P@ssword123';

# 刷新授权表信息

Mysql1> flush privileges;

Mysql2> flush privileges;

# 只在从节点数据库中执行如下命令进行同步,host为Master节点地址,file和pos为上一步中主节点查看show master status的Master的信息( 主要查看binlog文件的position(偏移)和File(日志文件)的值 比如 ....003和311)

# 执行完成后通过start slave;启动mysql1为主MySQL2为从的同步

Mysql1> show master status;

Mysql2>change master to master_host='192.168.148.130',master_user='repl', master_password='P@ssword123', master_port=3306, master_log_file='edu-mysql-bin.000003',master_log_pos=311, master_connect_retry=30;

# 启动从节点,开始工作接收主节点发送事件(数据库数据变更的所有事件) 

Mysql2> start slave;

# 此时再查看slave节点的状态

Mysql2> show slave status\G

Mysql2> stop slave;

# 只在从节点数据库中执行如下命令进行同步,host为Master节点地址,file和pos为上一步中主节点查看show master status的Master的信息,( 主要查看binlog文件的position(偏移)和File(日志文件)的值 比如 ....003和311)

# 执行完成后通过start slave;启动mysql2为主mysql1为从的同步。

Mysql2> show master status;

Mysql1>change master to master_host='192.168.148.129',master_user='repl', master_password='P@ssword123', master_port=3306, master_log_file='edu-mysql-bin.000002',master_log_pos=317, master_connect_retry=30;

# 启动从节点,开始工作接收主节点发送事件(数据库数据变更的所有事件) 

Mysql1> start slave;

# 此时再查看slave节点的状态

Mysql1> show slave status\G

Mysql1> stop slave;

slave启动失败问题总结:

从服务器配置的结果一定是:Slave_IO_Running 与 Slave_SQL_Running 状态都要为Yes
1:Change master to
如果从库的Slave未启动,Slave_IO_Running为NO。
可能是主库是的master的信息有变化,
查看主库show master status;
记录下File,Position字段,假设为‘mysql-bin.000004’,98;
在从库执行:

mysql>stop slave;
mysql>change master to master_log_file='mysql-bin.000004',master_log_pos=669;
mysql>start slave;
2:SET global sql_slave_skip_counter=n;
如果从库的slave_sql_running为NO。
Err文件中记录:
Slave:Error "Duplicate entry '1' for key 1" on query.....
可能是master未向slave同步成功,但slave中已经有了记录。造成的冲突可以在从库上执行
set global sql_slave_skip_counter=n;
跳过几步。再restart slave就可以了。
3:发现mysql slave服务器经常因为一些特殊字符或者符号产生的更新语句报错,整个同步也会因此而卡在那,最初的办法只是手动去出错的机器执行下面三条SQL语句,跳过错误即可

mysql>slave stop;
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql>slave start;

通过slave stop,slave start即可解决。

slave start启动后又会自动停掉,这时使用 change master重设主数据库信息的方式解决问题

#不细看仅参考#3.记下第一个MySQL服务器的IP地址,并使用该地址在第二个MySQL服务器上设置主服务器。

Master配置

# 先重启一下服务

shell> service mysqld restart  

# 登录到mysql

shell> mysql -uroot -p

# 创建数据库同步用户,并授予相应的权限

mysql> grant replication slave, replication client on *.* to 'repl'@'192.168.1.206' identified by 'root123456';

# 刷新授权表信息

mysql> flush privileges;

# 查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要用到mysql> show master status;

  

##master_user和master_password:在206上执行grant replication slave...创建的用户和密码 

# master_log_file和master_log_pos:在206上运行show master status;命令执行结果对应File和Position字段的值

mysql> change master to master_host='192.168.1.206',master_user='repl', master_password='root123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=439, master_connect_retry=30;

 ```

   CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=xxxx;

   ```

   其中`MASTER_LOG_FILE`和`MASTER_LOG_POS`参数应设置为第一个MySQL服务器上的binlog文件名和位置。

# 启动从节点,开始工作接收主节点发送事件(数据库数据变更的所有事件) mysql> start slave; # 此时再查看slave节点的状态 mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.206 Master_User: repl Master_Port: 3306 Connect_Retry: 30 Master_Log_File: edu-mysql-bin.000001 Read_Master_Log_Pos: 439 Relay_Log_File: edu-mysql-relay-bin.000002 Relay_Log_Pos: 287 Relay_Master_Log_File: edu-mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes

4. 在两个MySQL服务器上都启用复制。

   ```

   start slave;

5. 测试MySQL主主同步是否正常工作。

您可以在两个MySQL服务器之间执行一些插入、更新或删除操作,并检查它们是否在另一个服务器上得到了正确的重复。

请注意,以上步骤仅提供了一个简单的概述。在实践中,您可能会遇到其他问题和挑战,例如网络延迟、数据冲突等。因此,在进行任何更改之前,请务必备份所有相关数据,并仔细测试您的keepalived和MySQL主主同步配置。

  1. Keepalived安装部署配置

1.1安装依赖 keepalived软件依赖

1需要准备的系统依赖包可能版本号会更新,不是问题,主要要有依赖包

gcc

libnl-1.1.4-2.el6.x86_64

libnl-devel-1.1.4-2.el6.x86_64

libnfnetlink-1.0.0-1.el6.x86_64

libnfnetlink-devel-1.0.0-1.el6.x86_64

openssl-devel-1.0.1e-58.el6_10.x86_64

配置好yum源,使用yum install安装对应的包。

另外需要 安装mysql5.7 jdk1.8

yum install gcc libnl libnl-devel libnfnetlink libnfnetlink-devel openssl-devel

2报错

postfix-2.10.1-6.el7.x86_64 有缺少的需求 libmysqlclient.so.18()(64bit)

我的mysql5.7依赖包是  usr/lib64/libmysqlclient.so.20

由于我安装的是 libmysqlclient.so.20,而 Postfix 需要的是 libmysqlclient.so.18,因此需要创建符号链接以使Postfix可以找到正确的库文件。

以下是一些可能的解决方法:

确认已经安装了MySQL客户端库包:运行以下命令来检查包是否已安装:

rpm -qa | grep mysql

如果没有输出,则表示未安装MySQL客户端库包。可以使用以下命令安装它:

sudo yum install mysql-devel

创建符号链接:使用以下命令创建符号链接:

sudo ln -s /usr/lib64/mysql/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.18

该命令将创建一个名为 libmysqlclient.so.18 的符号链接,指向实际存在的 libmysqlclient.so.20 文件。

如果已经安装了MySQL客户端库包并且创建了符号链接,但yum仍无法找到 libmysqlclient.so.18 文件,则可能需要将库文件的路径添加到系统环境变量中。

以下是一些可能的解决方法:

打开 /etc/ld.so.conf 文件:

sudo nano /etc/ld.so.conf

在文件末尾添加以下行:

include /usr/lib64/mysql/

按 CTRL+X 然后输入 Y 和 ENTER 来保存并退出文件。

更新共享库缓存:

sudo ldconfig

现在,应该可以使用yum命令成功安装Postfix以及其他依赖于 libmysqlclient.so.18 的软件包。

若还是不行

确认您已经安装了MySQL客户端库包:运行以下命令来检查包是否已安装

rpm -qa | grep mysql

如果没有输出,则表示未安装MySQL客户端库包。

如果输出四个包名,安装则采用remove +包名卸载四个包

然后使用以下命令安装mysql客户端:

sudo yum install mysql-devel

3.yum安装keepalived

11yum安装keepalived

yum install -y keepalived

12查看版本

rpm -qa|grep keepalived

[root@master ~]# rpm -qa|grep keepalived

keepalived-1.3.5-19.el7.x86_64

13查看安装后目录

rpm -qc keepalived

[root@master ~]# rpm -qc keepalived

/etc/keepalived/keepalived.conf

/etc/sysconfig/keepalived

14配置非抢占式有抢占式)

vim   /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   router_id wiilead11 #标识 (可自定义)

}

vrrp_instance VI_1 {

    state BACKUP #从节点

    interface eno16777736  #绑定虚拟IP的网络接口(可通过ifconfig命令查看)

    virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组

    priority 150 # 非抢占式 两节点优先级一致 公平竞争

    nopreempt #非抢占式标识

    advert_int 1 #心跳间隔时间 两个节点设置必须一样

    authentication { #设置验证信息,两个节点必须一致 默认就行 可以不用更改

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.148.128 #虚拟ip 两个节点保持一致

    }

注:以上内容分别配置到两台服务器
router_id、interface、virtual_ipaddress 可自定义
其余配置可直接使用

15keepalived启动与检查

启动keepalived
systemctl start keepalived.service
设置开机启动
systemctl enable keepalived.service
查看开机自启列表
systemctl list-unit-files|grep enabled
查看启动状态
systemctl status keepalived.service

[root@master ~]# systemctl status keepalived.service

● keepalived.service - LVS and VRRP High Availability Monitor

   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)

   Active: active (running) since 二 2023-05-30 02:22:50 CST; 24s ago

  Process: 4172 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)

 Main PID: 4175 (keepalived)

1.2 编译安装keepalived
解压及配置:

tar -xvf keepalived-2.0.20.tar.gz

mv keepalived-2.0.20 /usr/local/src/

cd /usr/local/src/keepalived-2.0.20

./configure --prefix=/usr/local/keepalived

编译安装:

make&&make install

1.3 配置keepalived服务

1.配置服务文件

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin

cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/keepalived

2.加keepalived服务

chkconfig --list |grep keepalived

chkconfig --add keepalived

chkconfig keepalived on

3.配置keepalived日志

keepalived的日志默认是输出到/var/log/messages中,这样不便于查看。如何自定义keepalived的日志输出文件呢?
如果是用service启动的,修改/etc/sysconfig/keepalived文件
vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -d -S 0"

如果不是,则启动的时候指定以上参数,如:

/usr/local/keepalived/sbin/keepalived -d -D -S 0

修改/etc/syslog.conf(RHEL6.8以后配置/etc/rsyslog.conf)

# keepalived -S 0

local0.*     /var/log/keepalived.log

重启syslog:

# RHEL 5&6:

service syslog restart# RHEL 7:

service rsyslog restart

注:RHEL6.8也是按照RHEL7的方法来操作centos7实际上和rhel7一样配置

4.配置keepalived的MySQL故障转移
master1(121)机器上的keepalived.conf配置:
注:下面配置中没有使用lvs的负载均衡功能,所以不需要配置虚拟服务器virtual server

cd /etc/keepalived/

mv keepalived.conf keepalived.conf.bak

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

vrrp_script chk_mysql_port {

    script "/etc/keepalived/check_mysql.sh"

    interval 2

    weight -5

    fall 2

    rise 1

}

       

vrrp_instance VI_1 {

    state MASTER    

    interface eth0 #指定虚拟ip的网卡接口

    mcast_src_ip 192.168.1.121 #指定本服务器物理ip地址

    virtual_router_id 130 #路由器标识,MASTER和BACKUP必须是一致的,取值1-255,注意同一内网中不应有相同virtual_router_id的集群,可以考虑使用vip的最后一位进行标示。

    priority 101

    advert_int 1         

    authentication {   

        auth_type PASS

        auth_pass 888888   

    }

    virtual_ipaddress {    

        192.168.1.130 #指定虚拟ip地址

    }

      

track_script {               

   chk_mysql_port             

}

}

编辑 /etc/keepalived/check_mysql.sh
vi /etc/keepalived/check_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

    /etc/init.d/keepalived stop

fi

# 修改chk_mysql.sh权限

chmod 755 /etc/keepalived/check_mysql.sh

# 启动keepalived# service keepalived start

Starting keepalived: [ OK ]

master2(122)机器上的keepalived.conf配置:

cd /etc/keepalived/

mv keepalived.conf keepalived.conf.bak

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

vrrp_script chk_mysql_port {

    script "/etc/keepalived/check_mysql.sh"

    interval 2            

    weight -5                 

    fall 2                 

    rise 1               

}

       

vrrp_instance VI_1 {

    state BACKUP

    interface eth0    

    mcast_src_ip 192.168.1.122

    virtual_router_id 130  

    priority 99          

    advert_int 1         

    authentication {   

        auth_type PASS

        auth_pass 888888    

    }

    virtual_ipaddress {    

        192.168.1.130

    }

      

track_script {               

   chk_mysql_port             

}

}

编辑check_mysql.sh

vi /etc/keepalived/check_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

    /etc/init.d/keepalived stop

fi

chmod 755 /etc/keepalived/check_mysql.sh

启动keepalived:

# service keepalived start

Starting keepalived: [ OK ]

2.其他补充

2.1 查看keepalived日志:

tail -200f /var/log/keepalived.log

2.2 创建数据库、用户并赋权

--创建业务数据库:create database demo;

--创建业务用户:create user 'jingyu'@'%' identified by 'jingyu';

--赋予业务用户权限(默认):grant insert,update,delete,select,alter,create,index,SHOW VIEW on demo.* to 'jingyu'@'%';

此时应用侧已经可以使用命令mysql -ujingyu -p -h192.168.1.130或者客户端连接工具,登录到demo数据库进行相关操作了。

[root@test01 ~]# mysql -ujingyu -p -h192.168.1.130

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 27

Server version: 5.7.29-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

jingyu@mysqldb 00:00:  [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| demo               |

+--------------------+

2 rows in set (0.01 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NFTScan 正式上线 AI Search 浏览器,实现 NFT 数据双重搜索功能

近日,NFT 数据基础设施服务商 NFTScan 正式对外发布了 AI Search 浏览器,这一创新工具旨在为 NFT 生态中的开发者和用户提供简洁高效的 NFT 数据搜索与查询服务。NFTScan 的这一举措不仅帮助用户更方便地访问相关的 NFT 数据,还大幅提升了数据…

STM32F407ZGT6无操作系统移植lwip2.1.3,,具备DHCP功能

1.工程添加网络库文件 (1).拷贝文件夹 解压en.stsw-stm32070.zip压缩包,把STM32F4x7_ETH_LwIP_V1.1.1\Libraries\STM32F4x7_ETH_Driver文件夹下的inc和src文件夹拷贝到 STM32F407\FWLIB\STM32F4x7_ETH_Driver文件夹目录下: (2).重命名头文件 进入STM32F407\FWLI…

【TM1638不能成功读回按键值】

8led8按键8数码管。主函数调用TM1638_ReadData2,打印了返回值,无论是否按键,都一直打印255,为什么全是1,看来读数据函数有问题啊。 u8 TM1638_ReadData2(void) {uint8_t i;uint8_t temp0x00;TM1638_DIOModeInput();/…

前端读取response.headers异常:Cannot read properties of undefined (reading ‘split‘)

[TOC](前端读取response.headers异常:Cannot read properties of undefined (reading ‘split’) ) 前端读取response.headers异常 Cannot read properties of undefined (reading ‘split’) TypeError: Cannot read properties of undefined (reading ‘split’) 报错解释&a…

如何修改计算机ip地址?几招教你轻松改

在日常使用计算机的过程中,有时我们需要修改计算机的IP地址,无论是出于网络安全、网络管理还是其他特定需求。然而,对于非专业人士来说,这一过程可能显得复杂且充满挑战。但别担心,本文将带您了解IP地址基础知识&#…

day04 --js的常用对象、BOM对象和DOM对象

一、常用对象 1.1 数组 1.创建数组:let arr [1,2,3]; let arr new Array(1,2,3);注意:JS数组不区分数据类型,而且其长度可以随意改变,因此JS数组类似于Java中的集合 ​ 2.数组常用方法:length:这是一个属性,用于获取数组长度fo…

以「垂直模型」引领AIGC商业化落地,FancyTech的技术路径是什么?

我们正在见证又一轮技术革新,这一次是 AIGC 为个体提供表达自我的工具,让创作变得更加容易和普及,但背后的推动力却并不是「大」模型。 点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 两年以来,AIGC 技术的发…

快速备份与检索ChatGPT对话记录,以及便捷关闭聊天历史教程

近期,ChatGPT 用户遭遇了一系列对话记录意外丢失的事件,引发了广泛的关注和不便。用户们对于重要聊天记录的安全性表示担忧,害怕珍贵的交流内容会不翼而飞。 令人欣慰的是,OpenAI 在2023年4月11日宣布推出了一项新的功能——Chat…

雨云美国二区E5v2服务器测评(非广告)

注:本文非广告,非推广 本文长期更新地址: 雨云美国二区E5v2服务器测评(非广告)-星零岁的博客https://blog.0xwl.com/13594.html 今天来测评一下雨云美国二区v2服务器。我测试的这台配置是4-8, 35 M上传&a…

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job 简介一、前置条件:需要搭建调度中心1、先下载调度中心源码2、修改配置文件3、启动项目4、进行访问5、打包部署(上正式) 二、SpringBoot集成Xxl-Job1.…

水利机械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型

在当今这个科技日新月异的时代,水利机械行业正经历着一场深刻的变革,其中5G智能制造工厂物联数字孪生平台的引入,无疑是推动制造业数字化转型的重要驱动力。工业物联数字孪生平台是智能制造工厂的核心组成部分,它基于物理世界的真…

入门mysql 数据库

mysql是关系型数据库 (安装教程请参考主页相关文章https://blog.csdn.net/2401_86120676/article/details/141265678?spm1001.2014.3001.5502 和mysql Ubuntu安装与远程连接配置-CSDN博客) mysql相关指令 1.数据库 展示所有的数据库:sho…

基于神经网络逆同步控制方法的两变频调速电机控制系统matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 神经网络a阶逆系统 4.2 两电机的数学模型 4.3 两电机系统的神经网络逆同步控制 5.完整工程文件 1.课题概述 两电机变频调速系统是一个多输入多输出非线性强耦合的控制系统。本课题使用神经网络构造…

英伟达玩转剪枝、蒸馏:把Llama 3.1 8B参数减半,性能同尺寸更强

小模型崛起了。 上个月,Meta 发布了 Llama 3.1 系列模型,其中包括 Meta 迄今为止最大的 405B 模型,以及两个较小的模型,参数量分别为 700 亿和 80 亿。 Llama 3.1 被认为是引领了开源新时代。然而,新一代的模型虽然性能…

(javaweb)SpringBootWeb案例(毕业设计)案例--文件上传

1.简介 前端程序和服务端程序 对于前端 html文件放在static目录下 location---文件提交的位置 右键--copy value -------------c盘目录下 2.本地上传--文件存储 1. 2. 使用uuid:保证文件名是唯一的 此时 并没有文件的拓展名--所以需要---写后缀 用字符串截取 此时图…

Java、python、php版的宠物美容预约服务系统的设计与实现 (源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

【报告】从 YCombinator 支持的 400 家(2023年和2024年) AI 初创公司看AI行业

这份报告对 YC 2023 年和 2024 年队列中的 417 家人工智能公司进行了广泛的分析。对于那些不知道的人来说,YCombinator是一个领先的初创企业加速器,提供种子资金、指导和资源,以帮助早期初创企业取得成功,YCombinator (YC)在发现和…

SOMEIP_ETS_044: echoUTF16DYNAMIC_with_odd_number_after_termination

测试目的: 验证设备(DUT)是否能够正确处理一个在终止符之后多出一个字节的echoUTF16DYNAMIC字符串,并且能够去除这个多余的字节。 描述 本测试用例旨在检查DUT在接收到一个不符合UTF16DYNAMIC字符串规范(即在终止符…

【Python机器学习】利用PCA来简化数据——PCA

PCA(主成分分析)的优缺点: 优点:降低数据的复杂性,识别最重要的多个特征; 缺点:不一定需要,且可能损失有用信息; 适用数据类型:数值型数据。 移动坐标轴 如下…

【研发日记】嵌入式处理器技能解锁(四)——TI C2000 DSP的Memory

文章目录 前言 背景介绍 Memory映射 RAM ROM 外设Register Memory分配 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见《…