草庐IT

MySQL8 双主(主主)架构部署实战

我是沐风晓月 2023-04-18 原文

前言

大家好,我是 沐风晓月 本文收录于《数据库入门到精通系列》专栏, 更多内容可以关注我的csdn博客。

本文主要讲解MySQL主主架构实战,在开始之前需要根据下面的提示来配置环境:

本次实验需要提前配置好两台安装好MySQL8的服务器

文章目录


一. 实验环境

架构版本IPhostname
master1CentOS7.6192.168.1.41master41
master2CentOS7.6192.168.1.42master42

架构图如下:

数据库密码: Root!2#admin

二. 实验配置

2.1 数据库配置文件设置

要实现主主复制,就是在主从复制的基础上配置相互为主从。 这里很容易需要对两台服务器反复配置,很容易搞乱。

2.1.1 对数据库master1进行配置:

vim /etc/my.cnf

[mysqld]server-id = 1                                                
log-bin=mysql-bin                                        
auto_increment_increment=2
auto_increment_offset=1
replicate-do-db=test_db

对上文代码进行注释:

  • server-id = 1 #任意自然n,只需要保证两台mysql主机不重复就可以

  • log-bin=mysql-bin #开启二进制日志

  • auto_increment_increment=2 #步进值auto_imcrement 。一般有n台主mysql就填n

  • auto_increment_offset=1 #起始值,一般填写第n台主机mysql.此时为第一台主 mysql

  • #binlog-ignore=mysql #忽略mysql库,可以不填写

  • #binlog-ignore=infomation_schema #忽略information_schema库,一般不填写

  • replicate-do-db=test_db #指定同步的数据库,不填写则默认所有的数据库

配置完成后,重启数据库

2.1.2 修改master2 的配置文件

配置文件[mysqld]模块下添加以下内容:

vim /etc/my.cnf

server-id = 2 
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=test_db

2.2 相互设置主从架构

2.2.1 对MySQ1配置主从

对MySQL1配置主从,在这里就是对192.168.1.41这台服务器设置MySQL主从,master1做为主库,master2作为从库。

  1. 把MySQL1这台数据设置为主库
  • 登录数据库:
root@mufeng41 ~]# mysql -uroot -p'Root!2#admin'
  • 创建复制用户
    这里设置的用户名是:mufeng41,密码 mysqlMufeng@passw0rd
create user 'mufeng41'@'%' identified with mysql_native_password by 'mysqlMufeng@passw0rd';      
#创建用户 mysql8.0中密码需要填写mysql_native_password
grant replication slave on *.* to 'mufeng41'@'%';                         
#分配权限
flush privileges;    
#刷新权限
  • 查看权限是否分配正确
mysql> show grants for 'mufeng41'@'%';
+--------------------------------------------------+
| Grants for mufeng41@%                            |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `mufeng41`@`%` |
+--------------------------------------------------+
1 row in set (0.00 sec)

  • 查看master1的状态
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |     1125 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

2. 设置MySQL2为从库

  • 登陆master2数据库,执行同步语句
[root@mufeng42 ~]# mysql -uroot -p'Root!2#admin'
  • 在master2上执行同步语句
mysql> change master to master_host='192.168.1.41',
    -> master_user='mufeng41',
    -> master_password='mysqlMufeng@passw0rd',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=1125;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

为方便下次使用这个SQL语句方便,这里改成一条语句,不分段的(切记不需要执行两遍):

change master to master_host='192.168.1.41',master_user='mufeng41',master_password='mysqlMufeng@passw0rd',master_log_file='mysql-bin.000001',master_log_pos=1125;

  • 启动slave同步
    这一步骤是在MySQL2中启动,因为目前MySQL2是从库
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

3.测试主从是否成功

先在主数据库插入数据,然后从从库进行查询:

  • 主库操作如下:
mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)
  • 从库查看结果:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.01 sec)

mysql> 

至此已经配置成功master1做为主库,MySQL2做为从库的情况,如果你在配置这一步的时候,遇到问题,比如主从不同步的情况,可以参考文章:《成功解决主从同步异常之Slave_IO_Running显示为No的问题》

2.2.2 对MySQL2配置主从

此时 设置的主库为master2,从库为master1

1. 配置master2为主master服务器

  • 先对master2上进行授权
create user 'mufeng42'@'%' identified with mysql_native_password by 'mysqlMufeng@passw0rd';      
#创建用户 mysql.80中密码需要填写mysql_native_password
grant replication slave on *.* to 'mufeng42'@'%';                         
#分配权限
flush privileges;    
  • 查看master2作为master服务器的状态:
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysql-bind.000001 |     1051 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2. 配置master1为从服务器

  • 在master1 上执行同步语句,作为从服务器:
mysql> change master to master_host='192.168.1.42', master_user='mufeng42', master_password='mysqlMufeng@passw0rd', master_log_file='mysql-bin.000001', master_log_pos=1051;
Query OK, 0 rows affected, 8 warnings (0.01 sec)
  • 开启slave同步,检查slave状态
mysql> start slave;
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

有时候显示不同步可以直接设置reset slave

mysql> reset slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

  • 查看主从是否配置成功
mysql> show slave status \G


3. 插入数据进行主从测试

  • 然后在master2上创建数据在master1上进行查看
    此时的master2是主服务器
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
5 rows in set (0.00 sec)

mysql> use test_db
Database changed
mysql> create table test_db(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)
  • 在master1进行查看是否同步
mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| test_db           |
+-------------------+
1 row in set (0.01 sec)


可以看到,数据已经同步过来了,至此MySQL主主架构就配置完成了。

总结

以上就是主主架构配置的全部内容了,如果对你有用,欢迎点赞收藏哦。

💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
💕 学习如逆水行舟,不进则退,一起努力加油哦!
💕 喜欢的话记得点赞收藏哈

有关MySQL8 双主(主主)架构部署实战的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  3. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  4. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  7. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  8. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  9. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  10. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

随机推荐