环境准备:准备2台redhat7.5的虚拟机,配置好IP和yum源
我这里
主数据库(主服务器)的IP配置为:192.168.31.101
从数据库(从服务器)的IP配置为:192.168.31.102
1.实现MariaDB主从复制
Master-mariadb1(主数据库配置)
- 挂载光驱
- 安装mariadb服务器
- 主从数据库能互相ping通
-
启动mariadb服务与配置开机自启,发现端口3306
-
对数据库进行安全配置,为了禁止匿名访问数据库,需要重新配置密码(进入交互界面一路回车即可)
-
导入users.mdb数据(我这里提前准备好了数据库的测试数据)
- users.mdb脚本数据
-- MySQL dump 10.14 Distrib 5.5.35-MariaDB, for Linux (x86_64)
--
-- Host: localhost Database: Contacts
-- ------------------------------------------------------
-- Server version 5.5.35-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `u_name`
--
DROP TABLE IF EXISTS `u_name`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `u_name` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(50) NOT NULL,
`lastname` varchar(50) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `u_name`
--
LOCK TABLES `u_name` WRITE;
/*!40000 ALTER TABLE `u_name` DISABLE KEYS */;
INSERT INTO `u_name` VALUES (1,'san','zhang'),(2,'si','li'),(3,'wu','wang'),(4,'Barack','Obama'),(5,'George','Walker Bush'),(6,'Bill','Clinton'),(7,'Hillary','Clinton'),(8,'John','Clinton'),(9,'George','wang'),(10,'John','li'),(11,'Bill','wang'),(12,'George','Obama'),(13,'George','wang'),(14,'Michael','Jackson'),(15,'John','Clinton'),(16,'Michael','Walker Bush'),(17,'Michael','Obama'),(18,'Hillary','Jackson'),(19,'Georgexx','Jackson'),(20,'Barack','Jackson'),(21,'John','Jackson'),(22,'John','Obama'),(23,'John','Clinton'),(24,'John','Walker Bush'),(25,'John','wang');
/*!40000 ALTER TABLE `u_name` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `u_passwd`
--
DROP TABLE IF EXISTS `u_passwd`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `u_passwd` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `u_passwd`
--
LOCK TABLES `u_passwd` WRITE;
/*!40000 ALTER TABLE `u_passwd` DISABLE KEYS */;
INSERT INTO `u_passwd` VALUES (1,'redhat'),(2,'fedora'),(3,'centos'),(4,'centes'),(5,'redhrt'),(6,'ridhat'),(7,'redfat'),(8,'fadora'),(9,'cantos'),(10,'redhap'),(11,'contos'),(12,'fcdora'),(13,'cendora'),(14,'tangene'),(15,'tangrine'),(16,'tangerone'),(17,'tangeine'),(18,'taangerine'),(19,'tangerine'),(20,'tanggerine'),(21,'anggerine'),(22,'aggerine'),(23,'taggerine'),(24,'tanerine'),(25,'tannerine');
/*!40000 ALTER TABLE `u_passwd` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `u_loc`
--
DROP TABLE IF EXISTS `u_loc`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `u_loc` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`location` varchar(50) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `u_loc`
--
LOCK TABLES `u_loc` WRITE;
/*!40000 ALTER TABLE `u_loc` DISABLE KEYS */;
INSERT INTO `u_loc` VALUES (1,'Shenzhen'),(2,'Guangzhou'),(3,'Santa Clara'),(4,'Santa Clara'),(5,'San Francisco'),(6,'Santa Calara'),(7,'Santa Clare'),(8,'Santa Clara'),(9,'Florida'),(10,'Santa Claraa'),(11,'Florida'),(12,'State of Texas'),(13,'State of Texas'),(14,'Santa Claraa'),(15,'Santa Clara'),(16,'Colorado?CO'),(17,'Hawaii?HI'),(18,'Santa Calara'),(19,'Santa Clra'),(20,'Santa Clara'),(21,'Santa Clara'),(22,'Minnesota'),(23,'Vermont'),(24,'Santa Clara'),(25,'Minnesota');
/*!40000 ALTER TABLE `u_loc` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-07-24 18:17:53
-
以新密码登录数据库,创建UserData数据库并使用该数据库
-
将users.mdb脚本文件定向UserData数据库下,对该数据库进行数据的录入操作
-
查看UserData数据库生成的数据表 (表明数据录入正常)
-
配置主数据库的配置文件:my.cnf文件
-
参数相关:二进制日志文件名、日志文件格式选择混合模式、Server-id取唯一值即可
-
配置完后需要重启mariadb服务
-
重新登录数据库
- 查看主数据库的当前日志位置,复制点为245;
- 主数据库授权,创建一个复制账号;仅针对192.168.31该网段
- 查看主机信息
-
再次查看主数据库的当前日志位置,复制点变更成402;
对主数据库进行数据备份
-
第一步需要对主数据库进行锁库操作,其次并进行验证(锁库之后,数据库用户不能有其余的权限操作)
-
对主数据库进行备份数据,将主数据库的所有数据写入到一个all.sql文件当中
-
将主数据库备份的数据all.sql备份到从服务器上
Master-slave1从数据库配置(从服务器)
-
从服务器这一端进行验收查看,发现all.sql数据已经从主服务器上发送过来。
-
从服务器基础配置如下:挂载光驱、安装mariadb服务、maridb服务配置、数据库安全配置(重复主数据库配置的环境)
-
登录数据库的交互界面
-
验收从主数据库发送过来的数据是否正常
-
回到主数据库对数据进行解锁操作
-
从服务器配置mariadb服务
-
配置完后重启mariadb服务
-
切换Master,参数写对端(主数据库的参数)
-
主数据库防火墙放行服务
-
从数据库,查看slave服务的开启状态,2个都处于yes
实现主从服务器的验收: -
主数据库创建一个名为tes1的数据库
-
从数据库的那一端可以看到test1数据库存在
结论:1:主数据库变更导致从数据库也会跟着变更(从数据库受到影响)
结论2:从数据库变更而主数据库并不会跟着变更(主数据库不受到从数据库的影响)
结论3:主从复制,仅仅实现单边同步,一个是主人,一个是仆从,主人可以吩咐仆人做事,仆人却不能反转身份去命令主人行事(这就是主从复制的原理)。
实现MariaDB双主复制
-
IP:101的master主机的配置
-
重启mariadb服务
-
IP:102master主机(将原本的这台从服务器提升为主服务器,相当于我们现在拥有了2台主服务器,实现双主复制)
-
参数相关:服务器ID必须唯一、二进制日志文件、采用混合模式、设置步长(根据服务器多少而定)、初始偏移量
-
重启数据库服务
-
IP:102的这台主服务器创建复制用户并授权
-
通过show master status 查看二进制文件名称还有pos位置,为slave配置复制位置
-
IP:102的这台主服务器防火墙放行mysql服务
-
IP:101的这台主服务器切换Master,参数写对端
-
两台主服务器都需要启动slave服务,并且确保两台主服务器的这2个参数处于yes的开启状态。
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
主主复制(双主复制)验收结论:两边分别创建数据库,彼此都同步受到影响,实现双边同步
-
IP为101的主数据库创建一个名字叫test5的数据库
-
IP为102的主数据库也会同步生成test5的数据库
-
IP为102的主数据库创建一个名字叫test6的数据库
-
IP为101的主数据库也会同步生成test6的数据库
报错解决:
-
报错1:stop slave之后无法start slave,需要运行reset slave再start slave
-
报错2:两台主服务器上的show slave status\G都必须保持处于YES 的开启状态
如果存在NO(未开启的)都需要进行如下操作:
网友评论