IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql---主从同步 -> 正文阅读

[大数据]Mysql---主从同步

第一种同步结构 (一主一从同步结构)

数据库服务器 192.168.4.51 配置为master服务器

数据库服务器 192.168.4.52 配置为 slave服务器

第一步?配置master服务器?192.168.4.51

具体步骤如下:

1) 启用binlog日志文件
vim /etc/my.cnf
[mysqld]
server_id=51
log_bin=master51   #日志默认存储在数据库目录下
 :wq
]# systemctl  restart mysqld
2)用户授权
]# mysql -uroot  -p密码
replication slave 让用户有复制命令权限
 mysql> grant  replication slave on *.*  to  repluser@"%" identified by  "123qqq...A";
					  
3)查看日志信息
 #查看到的日志名和偏移量是给 从服务器使用的 
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master51.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

第二步?配置slave服务器?192.168.4.52

具体步骤如下:

1) 指定server_id 并重启mysqld服务
vim /etc/my.cnf
[mysqld]
server_id=52  #自己添加的
:wq
							
systemctl  restart mysqld
							
 2)确保数据一致(如果一致的此步骤可以省略)
 3)指定主服务器信息
 ]#mysql -uroot  -p密码
mysql> show slave status \G  #不是从数据库服务器
Empty set (0.00 sec)

					   
mysql> change master to  master_host="192.168.4.51",
master_user="repluser" , master_password="123qqq...A",
master_log_file="master51.000001" , master_log_pos=441 ;
					   			   
					   
4)启动slave进程 
mysql> start slave;
5)查看状态 (IO线程和 SQL线程必须同时是YES 状态)
mysql> show slave status \G  
Master_Host: 192.168.4.51
Master_User: repluser
Master_Port: 3306
Master_Log_File: master51.000001
Slave_IO_Running: Yes    #IO线程
Slave_SQL_Running: Yes   #SQL线程

#  如果出错 还原主机52 步骤如下:
rm -rf master.info
rn -rf relay-log.info
rm -rf host52-relay-bin.*
systemctl rester mysqld

测试主从同步的配置

1)在主服务器host51 建库建表 插入记录

mysql> create database db1;
mysql> create  table db1.t1(id int);
mysql> insert into db1.t1 values(119);
mysql> insert into db1.t1 values(120);
mysql> insert into db1.t1 values(114);

2) 在从服务器host52 可以查看到同样的数据
 ]#mysql -uroot -p123qqq...A   -e 'select * from db1.t1'

正常的排错方法:?根据?IO线程和?SQL线程的报错信息排错

mysql>?show?slave?status?\G ???

Last_IO_Error:??IO线程的报错信息?

Last_SQL_Error:??SQL线程的报错信息

报错示例1??及解决办法

Last_IO_Error: Got fatal error 1236 from master
 when reading data from binary log: 'Could not find first log file name in binary log index file'

    在从服务器执行如下操作:
	mysql> stop slave;
	
	在主服务器查看日志名和偏移量
	host51  show  master status;
	
	在从服务器 重新指定日志名和偏移量
	mysql> change  master to  master_log_file="日志名" , master_log_pos=偏移量;
	mysql> start slave;
	mysql> show  slave status \G

错误示例2?及解决办法

Last_IO_Error: Fatal error: 
The slave I/O thread stops because 
master and slave have equal MySQL server UUIDs; 
these UUIDs must be different for replication to work

在从服务器做如下操作:
vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=2dac4865-4770-11ec-9103-6462be92a06e   修改一个字母(字母个数不能少)
:wq
systemctl   restart  mysqld

错误示例3?及解决办法

Last_IO_Error: error connecting to master 'repluser@192.168.4.51:3306' retry-time: 60  retries: 2

 在从服务器做如下操作:
		MySQl> stop  slave;
		mysql> change master to  master_user="repluser",master_password="123qqq...A";
		MySQL>  start slave;
		mysql> show slave status \G

所有错误的?统一解决办法

把slave角色的服务器恢复为独立的数据库服务器,重新配置为从服务器。

在从服务器执行如下操作:
 systemctl  stop   mysqld 
 cd  /var/lib/mysql/
 rm  -rf master.info
 rm -rf   *-relay-bin.*
 rm -rf relay-log.info
 systemctl   start  mysqld

第二种同步结构?(一主多从同步结构)

创建1台新的数据库服务器?配置地址是?192.168.4.53

实验要求:把数据库服务器192.168.4.53也配置为192.168.4.51?的从服务器

在数据库服务器host53?做如下配置:

具体步骤如下

???1)?指定server_id?并重启mysqld服务

[root@host53 ~]# vim /etc/my.cnf
[mysqld]
server_id=53  #添加
:wq
[root@host53 ~]# systemctl  restart mysqld

2)确保数据一致(如果一致的此步骤可以省略)

具体操作如下:

第1步:在主服务器host51 对db1库做完全备份 ,然后把备份文件拷贝给host53 主机--master-data 做完全备份数据时 
在备份文件里记录使用的日志名和偏移量							
[root@host51 ~]# mysqldump -uroot -pNSD2107...a --master-data -B db1 > /root/db1.sql
[root@host51 ~]# scp /root/db1.sql  192.168.4.53:/opt/

							
第2步:host53 主机 使用备份文件恢复数据
[root@host53 ~]# mysql -uroot -p123qqq...A  <  /opt/db1.sql                          
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'show databases'
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select count(*) from db1.t1'
[root@host51 ~]# mysqldump -uroot -pNSD2107...a --master-data -B db1 > /root/db1.sql
[root@host51 ~]# scp /root/db1.sql  192.168.4.53:/opt/
				
2步:host53 主机 使用备份文件恢复数据
[root@host53 ~]# mysql -uroot -p123qqq...A  <  /opt/db1.sql                          
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'show databases'
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select count(*) from db1.t1'

3)指定主服务器信息

 #在备份文件里查看日志名和偏移量
[root@host53 ~]# grep master51 /opt/db1.sql 
CHANGE MASTER TO MASTER_LOG_FILE='master51.000001', MASTER_LOG_POS=2000;
#管理员root 登录指定主服务器信息
[root@host53 ~]# mysql -uroot -p123qqq...A		   
mysql> change master to master_host="192.168.4.51" , master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000001",
master_log_pos=2000;

4)启动slave进程

mysql> start slave;

5)查看状态?(IO线程和?SQL线程必须同时是YES?状态)

mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

6)?查看数据

mysql> select  * from  db1.t1;

测试一主多从的配置

#在主服务器插入新数据
mysql> insert into db1.t1 values(99988);
# 两台从服务器可以看到一样的数据
 [root@host52 mysql]# mysql -uroot -p123qqq...A -e 'select * from db1.t1'
 [root@host53 mysql]# mysql -uroot -p123qqq...A -e 'select * from db1.t1'

mysql?主从从?同步结构实验

主从从结构?:?给一主一从结构中的从服务器也配置从服务器

??环境准备:

??目的1??掌握如何把从服务器恢复为独立的数据库服务器

??目的2??节省时间(用恢复为独立数据库服务器的host53?与?新的数据库服务器?host54?和??host55??配置主从从结构实验)

?把主机host53?恢复为独立的数据库服务器

cd /var/lib/mysql
  rm -rf master.info 
  rm -rf host53-relay-bin.*
  rm -rf relay-log.info 
  systemctl  restart mysqld

准备2台新的数据库服务器?ip地址分别为?192.168.4.54?和??192.168.4.55

具体配置步骤如下:

第1步:配置主数据库服务器?192.168.4.53

1) 启用binlog日志
vim /etc/my.cnf
[mysqld]
server_id=53
log_bin=master53
							:wq
							
systemctl restart  mysqld
							
2) 用户授权
host53~]# mysql  -uroot  -p123qqq...A
mysql> grant replication slave on *.*  to repluser@"%" identified by "123qqq...A";

3) 查看日志信息
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master53.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+

第2步:配置主机192.168.4.54?

说明:因为host54主机同时是2种角色,所以2种角色的配置都要有

vim /etc/my.cnf
[mysqld]
server_id=54
log_bin=master54
log_slave_updates #允许级联复制,host54主机把自己主服务器的数据
				                   拷贝给自己的从服务器。
:wq
[root@host54 ~]# systemctl  restart mysqld
[root@host54 ~]# mysql -uroot -p123qqq...A
mysql> grant  replication slave on *.*  to repluser@"%" identified by "123qqq...A";
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master54.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

#指定主服务器信息,日志名偏移量要做host53主机查看后填写  
[root@host54 ~]# mysql -uroot -p123qqq...A        
mysql> change master to master_host="192.168.4.53",master_user="repluser",master_password="123qqq...A",
    -> master_log_file="master53.000001",master_log_pos=441;
mysql> start slave;
mysql> show slave status \G
 Master_Host: 192.168.4.53
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

第3步:配置主机192.168.4.55?(做host54主机的从服务器)

1)?指定server_id??并重启mysqld服务

2)指定主服务器信息(binlog日志名和偏移量要做host54主机查看后填写)

3)启动slave进程

4)查看进程状态

]# vim /etc/my.cnf
[mysqld]
server_id=55
:wq
systemctl restart  mysqld
]# mysql  -uroot  -p123qqq...A							
mysql> change master to master_host="192.168.4.54",master_user="repluser",master_password="123qqq...A",
    -> master_log_file="master54.000001",master_log_pos=441;
mysql> start slave;
mysql> show slave status \G
Master_Host: 192.168.4.54
Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

第4步:验证主从从结构的配置

#在主服务器Host53主机创建的数据 在主机host54 和 host55 都能看到
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'create database  gamedb'
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'create table  gamedb.a(id int)'
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@host53 ~]# 
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'insert into gamedb.a values(888)'
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select * from gamedb.a'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| id   |
+------+
|  888 |
+------+
[root@host53 ~]# 

[root@host54 ~]# mysql -uroot -p123qqq...A -e 'select * from gamedb.a'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| id   |
+------+
|  888 |
+------+
[root@host55 ~]# 			
[root@host55 ~]# mysql -uroot -p123qqq...A -e 'select * from gamedb.a'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| id   |
+------+
|  888 |
+------+
[root@host55 ~]# 

第四种同步结构?主主结构

主主结构也叫互为主从。

准备2台新数据库服务器,IP地址192.168.4.68??和??192.168.4.69??

2台数据库服务器分别做彼此的从服务器和主服务器,

2台服务器2种角色的配置都要有

第1步:?配置数据库服务?host56

vim /etc/my.cnf
[mysqld]
server_id=56
log_bin=master56
:wq
systemctl  restart  mysqld			

]# mysql  -uroot  -p123qqq...A			
mysql> grant  replication slave on *.*  to  repluser@"%" identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master56.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

第2步:?配置数据库服务?host57

[root@host69 ~]# vim /etc/my.cnf
[mysqld]
server_id=57
log_bin=master57
:wq
systemctl  restart  mysqld	

mysql> grant replication slave on *.*  to repluser@"%"  identified by "123qqq...A";
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master57.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

mysql> 
#把自己配置为host68的slave服务器,日志名和偏移量要在host68主机查看后填写
mysql> change master to  master_host="192.168.4.56",master_user="repluser",master_password="123qqq...A",
    -> master_log_file="master56.000001",master_log_pos=441;
mysql> start slave;
mysql> show slave status \G
			Master_Host: 192.168.4.56
			Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

第3步:在host56? 主机数据库管理员登录服务后?

#把自己指定为host57 主机的slave 服务器
[root@host56 ~]# mysql -uroot -p123qqq...A
mysql> change master to  master_host="192.168.4.57" , master_user="repluser" , master_password="123qqq...A",
    -> master_log_file="master69.000001",master_log_pos=441;
mysql> start slave;
mysql> show slave status \G
			Master_Host: 192.168.4.57
			Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

第4步:测试主主结构的配置

先在host68主机健库表插入记录 , 在host57 主机可以看到同样的数据
[root@host56~]# mysql -uroot -p123qqq...A -e 'create database db1'
[root@host56 ~]# mysql -uroot -p123qqq...A -e 'create table db1.a(id int)'
[root@host56 ~]# mysql -uroot -p123qqq...A -e 'insert into db1.a values(666)'
[root@host56 ~]# mysql -uroot -p123qqq...A -e 'select * from db1.a' 
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| id   |
+------+
|  666 |
+------+
[root@host56 ~]# 
					
然后再在host57 库下的表插入新记录,在host57主机可以看到同样的数据
[root@host57 ~]# mysql -uroot -p123qqq...A -e 'insert into db1.a values(777)' 
[root@host57 ~]# mysql -uroot -p123qqq...A -e 'select * from db1.a'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| id   |
+------+
|  666 |
|  777 |
+------+
[root@host57 ~]# 

mysql?主从同步复制数据工作模式

1)主从同步复制模式?可以在任意数据库服务器启用半同步服务模式

支持的工作方式:

第1种?异步复制模式(默认)

主服务器执行完一次事务后,立即将结果返给客户端,

不关心从服务器是否已经同步数据。

第2种?半同步复制模式

主服务器在执行完一次事务后,等待至少一台从服务器同步数据完成,

才将结果返回给客户端。

统一在?192.168.4.50??主机?做实验

方法1??命令行设置?

好处:不用重启服务马上生效

安装模块

#安装master模块
MySQL> INSTALL  PLUGIN  rpl_semi_sync_master   SONAME  "semisync_master.so";
  								
#安装slave模块
MySQL> INSTALL  PLUGIN  rpl_semi_sync_slave   SONAME  "semisync_slave.so";	

查看模块是否安装

mysql> SELECT  plugin_name, plugin_status FROM  information_schema.plugins  
WHERE plugin_name LIKE "%semi%"; 
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
| rpl_semi_sync_slave  | ACTIVE        |
+----------------------+---------------+

启用模块

#启用master模块
mysql> SET  GLOBAL rpl_semi_sync_master_enabled=1;
 								
#启用slave模块
mysql> SET  GLOBAL rpl_semi_sync_slave_enabled=1;	

查看模块是否启用

MySQL> SHOW  VARIABLES  LIKE  "rpl_semi_sync_%_enabled"; 								
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
| rpl_semi_sync_slave_enabled  | ON    |
+------------------------------+-------+

方法2??永久配置?编辑主配置文件

vim  /etc/my.cnf
[mysqld]
	#安装模块			plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
												
#启用模块
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_enabled=1
:wq

重启服务?模块依然是启用状态

ystemctl   restart mysqld
						
MySQL> SHOW  VARIABLES  LIKE  "rpl_semi_sync_%_enabled"; 						+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
| rpl_semi_sync_slave_enabled  | ON    |

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:43:14  更:2022-04-22 18:44:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:13:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码