mysql复制技术、mysql集群

这篇具有很好参考价值的文章主要介绍了mysql复制技术、mysql集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mysql复制技术/mysql集群

mysql复制技术、mysql集群

准备

1.四台虚拟机都关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2.四台虚拟机都设置好host域名解析,在/etc/hosts文件中添加如下

[root@mysql01 ~]# vim /etc/hosts
192.168.70.33 master1
192.168.70.34 master2
192.168.70.35 slave1
192.168.70.36 slave2

五台机器都ping一下网络
[root@mysql01 ~]# ping master1
PING master1 (192.168.70.33) 56(84) bytes of data.
64 bytes from master1 (192.168.70.33): icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from master1 (192.168.70.33): icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from master1 (192.168.70.33): icmp_seq=3 ttl=64 time=0.056 ms

3.在干净的环境下安装好mysql(yum、二进制、源码都行)

​ 四台mysql统一密码方便后续使用

[root@mysql02 ~]# grep password /var/log/mysqld.log
2023-08-13T13:44:46.837257Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 7R_e*/+_)(l8
[root@mysql02 ~]# mysqladmin -uroot -p password
Enter password: 
New password: 
Confirm new password: 

一、mysql M-S 传统

master设置

1.首先在master1中创建数据库、表 模拟服务器已经运行一段时间

mysql> create database xux;
Query OK, 1 row affected (0.00 sec)

mysql> use xux;
Database changed
mysql> create table xux.t1(id int(10));
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> insert into xux.t1 values(1),(2);
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

2.设置master的mysql配置

1.因为是备库中的i/o线程将主库中的二进制日志复制到中继日志中,所以需要打开二进制日志,同时设置好server-id。
在/etc/my.cnf文件下[mysqld]下面添加
vim /etc/my.cnf
[mysqld]
log-bin
server-id=1

[root@mysql01 ~]# tail -2 /etc/my.cnf
log-bin
server-id=1

2.设置好后重启mysql
systemctl restart mysqld

3.创建复制用户

mysql> CREATE USER 'rep'@'192.168.70.%' IDENTIFIED BY 'Xuxin_0709';

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'rep'@'192.168.70.%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;

4.备份数据

[root@mysql01 ~]# mysqldump -uroot -p 'Xuxin_0709' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql

扩展(可忽略)

​ 如果设置--master-data=1 后续slave设置主服务器可以不用填master_log_file和master_log_pos,但是数据库导入必须使用source导入

5.复制给slave

[root@mysql01 ~]# scp ./2023-08-14-mysql-all.sql master2:/root

6.再插入一些数据

mysql> insert into xux.t1 values(3);
Query OK, 1 row affected (0.01 sec)

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

slave设置

1.测试授权的用户

[root@mysql02 ~]# mysql -hmaster1 -urep -p'Xuxin_0709'

2.开启server-id

[root@mysql02 ~]# vim /etc/my.cnf
[mysqld]
server-id=2

[root@mysql02 ~]# systemctl restart mysqld

3.导入数据库

	先进入mysql暂停log-bin日志记录,不记录导入数据的记录
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

导入sql
mysql> source 2023-08-14-mysql-all.sql

或者在linux界面导入
[root@localhost ~]# mysql -uroot -p < /2023-08-14-mysql-all.sql

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

4.查看sql中的日志master_log_file和master_log_pos

​ [root@mysql01 ~]# vim 2023-08-14-mysql-all.sql

mysql复制技术、mysql集群

5.设置主服务器

mysql> change master to master_host='master1',master_user='rep',master_password='Xuxin_0709',master_log_file='mysql01-bin.000002',master_log_pos=157;

6.启动从设备并查看slave状态

mysql> start slave;

show slave status\G

mysql复制技术、mysql集群

7.查看数据可以发现数据已同步

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.01 sec)

测试

再来测试一下
在master1 xux.t1表中插入数据 看看slave机器会不会同步数据

1.在master1机器登录mysql插入数据

mysql> insert into xux.t1 values(4);
Query OK, 1 row affected (0.01 sec)

2.在slave机器查看数据

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
4 rows in set (0.00 sec)

二、mysql M-S GTID

准备

为接下来新的同步实验需要将之前的同步设置清空,也就是重置master2的mysql

systemctl stop mysqld

rm -rf /var/lib/mysql/*

systemctl start mysqld

grep password /var/log/mysqld.log

mysql -uroot -p'w#lHVC_Rc30r'

mysqladmin -uroot -p password

master设置

1.启动二进制日志,服务器ID,GTID
由于我们之前配置过了id这里只需配置GTID。配置完后重启mysqld

[root@mysql01 ~]# vim /etc/my.cnf
gtid_mode=ON
enforce_gtid_consistency=1

[root@mysql01 ~]# systemctl restart mysqld

2.授权复制用户rep(上面M-S传统已配置 这里忽略)

3.备份数据
为了实验方便这里把之前的sql备份文件删掉

[root@mysql01 ~]# rm -rf 2023-08-14-mysql-all.sql
备份一份新的
[root@mysql01 ~]# mysqldump -uroot -p --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql
传给master2
[root@mysql01 ~]# scp ./2023-08-14-mysql-all.sql master2:/root/

4.模拟数据变化

mysql> insert into xux.t1 values(5);
Query OK, 1 row affected (0.01 sec)

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)

slave设置

1.测试rep用户是否可用

[root@mysql02 ~]# mysql -hmaster1 -urep -p'Xuxin_0709'

2.启动二进制日志,服务器ID,GTID,配置完后重启mysqld

[root@mysql02 ~]# vim /etc/my.cnf
server-id=2
log_bin
gtid_mode=ON
enforce_gtid_consistency=1

[root@mysql01 ~]# systemctl restart mysqld

3.恢复手动同步数据

先关闭log-bin日志记录
mysql> set sql_log_bin=0;

导入数据
mysql> source /root/2023-08-14-mysql-all.sql;

查询一下数据
mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
4 rows in set (0.00 sec)

4.设置主服务器

mysql> change master to master_host='master1',master_user='rep',master_password='Xuxin_0709',master_auto_position=1;

5.启动slave并查看数据

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

mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.01 sec)

三、mysql M-M-S-S

考虑到主服务器如果宕机,那个整个集群的写入能力将会受到影响,那么可以设置双主多从的方式,为数据做好保障。

M-M

因为前面大多数设置已经设置好了,下面是在上面已完成步骤的基础下操作
1.在master2上进行授权

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'rep'@'192.168.70.%' identified by 'Xuxin_0709';

mysql> select user,host from mysql.user;
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| rep              | 192.168.70.% |
| mysql.infoschema | localhost    |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
| root             | localhost    |
+------------------+--------------+
5 rows in set (0.01 sec)

在master1上测试
[root@mysql01 ~]# mysql -urep -hmaster2 -p'Xuxin_0709';

2.配置master1

mysql> change master to master_host='master2',master_user='rep',master_password='Xuxin_0709',master_auto_position=1;   //基于GTID

让master1也有从的功能,所以现在master1 master2都即是主,也是从。
mysql> start slave;

3.测试

在master2中插入数据
mysql> insert into xux.t1 values(6);

在master1看数据是否会同步
mysql> select * from xux.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
+------+
6 rows in set (0.00 sec)

S-S

1.先把master1数据备份 传给slave1 slave2

[root@mysql01 ~]# mysqldump -uroot -p'Xuxin_0709' --all-databases --single-transaction --master-data=2 --flush-logs > mmss-mysql-all.sql

[root@mysql01 ~]# scp mmss-mysql-all.sql slave1:/root
[root@mysql01 ~]# scp mmss-mysql-all.sql slave2:/root

2.在slave1 slave2 导入数据(两台机器都导入数据)

[root@mysql03 ~]# mmysql -uroot -p'Xuxin_0709' < mmss-mysql-all.sql
[root@mysql04 ~]# mmysql -uroot -p'Xuxin_0709' < mmss-mysql-all.sql

3.配置slave1 slave2 (从服务器没必要开启log-bin)并重启

[root@mysql03 ~]# vim /etc/my.cnf
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

[root@mysql04 ~]# vim /etc/my.cnf
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

[root@mysql03 ~]# systemctl restart mysqld
[root@mysql04 ~]# systemctl restart mysqld

4.设置主服务器
slave1

mysql> change master to master_host='master1',master_user='rep',master_password='Xuxin_0709',master_auto_position=1 for channel 'master1';

mysql> change master to master_host='master2',master_user='rep',master_password='Xuxin_0709',master_auto_position=1 for channel 'master2';

mysql> start slave;

mysql> show slave status\G

slave2

mysql> change master to master_host='master1',master_user='rep',master_password='Xuxin_0709',master_auto_position=1 for channel 'master1';

mysql> change master to master_host='master2',master_user='rep',master_password='Xuxin_0709',master_auto_position=1 for channel 'master2';

mysql> start slave;

mysql> show slave status\G

5.测试
在master1 master2 变更数据

​ master1

mysql> insert into xux.t1 values(7);

查看master2 slave1 slave2数据是否变化
mysql> select * from xux.t1;

​ master2文章来源地址https://www.toymoban.com/news/detail-649260.html

mysql> insert into xux.t1 values(8);

查看master1 slave1 slave2数据是否变化
mysql> select * from xux.t1;

到了这里,关于mysql复制技术、mysql集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第91讲:MySQL主从复制集群主库与从库状态信息的含义

    通过以下命令查看主库的状态信息。 在主库中查询当前数据库中的进程,看到 Master has sent all binlog to slave; waiting for more updates 这个信息时,就表示主库一切正常,主库已经将全部的Binlog日志发送给了从库,等待新的Binlog产生,有几行该信息就表示有几个从库。 通过以下目录

    2024年01月22日
    浏览(39)
  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

    💖The Begin💖点点关注,收藏不迷路💖 首先,确保你已经安装了Docker。 要下载特定版本的Tomcat镜像,可以在 docker pull 命令后面添加 image_name: tag 参数。其中 tag 制定了镜像的版本号。 解决插入中文报错: 总结: docker安装完mysql,运行实例之后,建议先修改完字符集编码后再

    2024年02月10日
    浏览(39)
  • 第100讲:MHA+Atlas实现MySQL主从复制读写分离分布式集群

    Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。 Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来

    2024年02月21日
    浏览(57)
  • 替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎

    作者:Anirban Rahut、Abhinav Sharma、Yichen Shen、Ahsanul Haque 原文链接:https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/ 译者:ChatGPT 责编:张红月 MySQL Raft是MySQL数据库中一种基于Raft协议的分布式一致性复制机制。近日,Meta技术团队分享了他们基于Raft协议在数据库基础设施

    2024年02月05日
    浏览(41)
  • 小研究 - Mysql快速全同步复制技术的设计和应用(三)

    Mysql半同步复制技术在高性能的数据管理中被广泛采用,但它在可靠性方面却存在不足.本文对半同步复制技术进行优化,提出了一种快速全同步复制技术,通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段,在保证数据可靠性的基础

    2024年02月14日
    浏览(38)
  • 小研究 - Mysql快速全同步复制技术的设计和应用(一)

    Mysql半同步复制技术在高性能的数据管理中被广泛采用,但它在可靠性方面却存在不足.本文对半同步复制技术进行优化,提出了一种快速全同步复制技术,通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段,在保证数据可靠性的基础

    2024年02月14日
    浏览(37)
  • windowsxp下的mysql集群技术

    1、准备工作 a、系统环境为:Windows Xp系统 b、mysql版本为:MySQL Server 5.5 c、mysql cluster版本为:mysql-cluster-gpl-noinstall-7.1.10-win32.zip d、计算机3台 Node IP Address Management (MGMD) node 192.168.18.8 MySQL server (SQL) node “A” 192.168.18.11 MySQL server (SQL) node “B” 192.168.18.17 Data (NDBD) node \\\"A\\\" 192.168.1

    2024年02月10日
    浏览(34)
  • redis复制和分区:主从复制、哨兵模式和集群模式

    在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述: 主从复制 (Replication) 基本概念 :Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操作的负载均衡、数据备份、灾难恢复等

    2024年01月20日
    浏览(47)
  • HBase集群复制之验证

    0. prerequisite Suppose 2 HBase pseudo distributed clusters have both started as folowing relevant parameters in hbase-site.xml  source destnation hbase.zookeeper.quorum macos ubuntu hbase.zookeeper.property.clientPort 2181 2181 zookeeper.znode.parent /hbase   /hbase 1. Create table for replication 1) start hbase shell on source cluster and create a table

    2024年02月09日
    浏览(38)
  • Redis 主从复制 哨兵 集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包