Mysql的高可用方案及主从详细配置

1、常用的高可用MySQL解决方案:

数据库作为最基础的数据存储服务之一,在存储系统中有着非常重要的地位,因此要求其具备高可用性无可厚非。能实现不同SLA(服务水平协定)的解决方案有很多种,这些方案可以保证数据 库服务器在硬件或软件出现故障时服务继续可用。

高可用需要解决的主要问题有两个,一是如何实现数据共享或同步数据,另一个是如何处理failover。数据共享一般的解决方案是通过SAN(Storage Area Network)来实现,而数据同步可以通过rsync软件或DRBD技术来实现。failover的意思是指当服务器死机或出现错误时可以自动切换到其他备用服务器,不影响服务器上业务系统的运行。


常用的解决方案有:主从复制、MMM高可用、Heartbeat/SAN、Heartbeat/DRBD,还有MySQL Clustter高可用解决方案。下面将重点介绍主从复制高可用解决方案。

下面配置文章内容基本上来自于:http://www.cnblogs.com/zhoujie/p/mysql1.html

仅对运行过程出现错误的地方进行局部的修改,已标注出。


Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。

首先确保主从服务器上的Mysql版本相同。

 

一、安装部署mysql

1、 安装服务器端:yum install mysql-server

         yum install mysql-devel

  安装客户端:   yum install mysql

2、启动服务

service mysqld start

3、安装完后执行下面命令进行初始化配置,会要求设置密码:

/usr/bin/mysql_secure_installation

4、设置允许远程连接到该mysql服务器

登陆到mysql: mysql -uroot -ptest123

复制代码
[root@zhoujietest ~]# mysql -uroot -ptest123  #账号root,密码test123
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.5.35-log MySQL Community Server (GPL) by RemiCopyright (c) 2000, 2013, 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.mysql> 
复制代码

这时比如通过navicat连接是是失败的。需要设置下mysql库下面的user表:

复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cmdb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)mysql> use mysql;
Database changed
mysql> update user set host='%' where user='root';
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
mysql> 
复制代码

虽然提示更新失败,但实际上是更新成功的。设置允许任意主机连接。

若是进入mysql报这个错:Access denied for user (using password: YES)

则如下解决:

1)、关闭mysql

  service mysqld stop

2)、屏蔽权限

mysqld_safe --skip-grant-table

3)、另起一个终端执行如下:

复制代码
[root@zhoujietest ~]#mysql -u rootmysql>delete from user where user='';mysql>flush privileges; #这个一定要执行,否则关闭之前的终端错误会重现mysql>\q
复制代码

 

二、配置mysql主从同步

准备两台测试的虚拟机,如上安装mysql环境,并开启mysql服务

主master : 192.168.8.10

从slave  :   192.168.8.11

1、配置主库:

1)、授权给从数据库服务器

mysql>GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.8.11' identified by 'test123456';
mysql>FLUSH PRIVILEGES;

2)、修改主库配置文件,开启binlog,并设置server-id,每次修改配置文件后都要重启mysql服务才会生效

vim /etc/my.cnf

在该配置文件[mysqld]下面添加下面内容:

复制代码
[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=1
binlog-do-db = cmdbdatadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
......
复制代码

server-id:master端的ID号;

log-bin:同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的(我这里是偷懒了,直接放在了下面那个datadir下面);

binlog-do-db:要同步的数据库名

还可以显示 设置不同步的数据库:

binlog-ignore-db = mysql 不同步mysql库和test库
binlog-ignore-db = test

 

修改配置文件后,重启服务:service mysqld restart

如果启动失败,通过cat /var/log/mysqld.log | tail -30  查看mysql启动失败的日志,从日志内容寻找解决方案

3)、查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

复制代码
mysql> show master status;
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000001 |     1304 | cmdb         |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
复制代码

主服务器已配置好。

 

2、配置从库

1)、理所当然也是从配置文件着手,在/etc/my.cnf 添加下面配置:

复制代码
[mysqld]
server-id=2
master-host=192.168.8.10
master-user=rep1
master-password=test123456
master-port=3306
replicate-do-db=cmdb
......
复制代码

重启时报错:mysqld: unknown variable ‘master-host=

说明mysql不认识这些变量,网上搜罗了一番,原因是mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置,从库my.cnf里只保留server-id和

replicate-do-db两个参数。

mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.10',MASTER_PORT=3306,MASTER_USER='rep1',MASTER_PASSWORD='test123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=1304; #后面两个参数的值与主库保持一致,执行show master status时,输出的position

2)、启动slave进程

mysql> start slave;
Query OK, 0 rows affected (0.04 sec)

3)、查看slave的状态,如果下面两项值为YES,则表示配置正确:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

特别注意:此处应为start slave

从库正在等待主库更新数据。。。Waitin for master to send event...

 

三、同步主库已有数据到从库

主库操作:

1、停止主库的数据更新操作

mysql>flush tables with read lock;

2、新开终端,生成主数据库的备份(导出数据库)

[root@zhoujietest ~]# mysqldump -uroot -ptest123 cmdb > cmdb.sql

3、将备份文件传到从库

 
[root@zhoujietest ~]# scp cmdb.sql root@192.168.8.11:/root/

4、主库解锁

mysql>unlock tables;

 

从库操作:

1、停止从库slave

mysql>stop slave;

2、新建数据库cmdb

mysql> create database cmdb default charset utf8;

3、导入数据

[root@ops-dev ~]# mysql -uroot -ptest123 cmdb<cmdb.sql 

4、查看从库已有该数据库和数据 

复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cmdb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
复制代码

 

此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。

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

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

相关文章

vue3+element plus组件库中el-carousel组件走马灯特效,当图片变动时下面数字也随着图片动态变化

1.效果图 2.html <section style"height:30%"><div class"left-img1-title"><img src"../assets/img/title.png"alt""srcset""><div class"text">回收垃圾数量</div></div>…

数据库MySQL/mariadb知识点——数据类型

数据类型 所谓的列类型&#xff0c;其实就是指数据类型&#xff0c;即对数据进行统一的分类&#xff0c;从系统的角度出发是为了能够使用统一的方式进行管理&#xff0c;更好的利用有限的空间。 在 SQL 中&#xff0c;将数据类型分成了三大类&#xff0c;分别为&#xff1a;数值…

期货大赛项目|九,fileinput插件的应用

引入JS和CSS bundles.Add(new ScriptBundle("~/bundles/fileinputJs").Include( "~/Content/vendors/bootstrap-fileinput-master/js/fileinput.min.js", "~/Content/vendors/bootstrap-fileinput-master/js/locales/zh.js", "~/Scripts/fi…

PLSQL中文显示乱码(问号)

1、输入 select * from V$NLS_PARAMETERS 查看第一行value值是否为简体中文 simplified chinese 实际显示为&#xff1a;AMERICAN 2、设置本地环境变量 &#xff1a;NLS_LANG NLS_LANGAMERICAN_AMERICA.ZHS16GBK NLS_LANG的值为三个划线值拼接而成。 3、重新打开PLSQL…

Mybatis下collections使用pageHelper进行分页

pageHelper在对mybatis一对多分页时造成查询总页数结果不对的情况。 可以做出如下修改&#xff1a; service层&#xff1a; public CommonResult worksList(String userId, int page, int pageSize) throws Exception { PageHelper.startPage(page, pageSize); List<…

解决ubuntu系统root用户下Chrome无法启动问题

说明&#xff1a;本文转载自-https://www.cnblogs.com/hbsygfz/p/8409517.html 由于ubuntu16.04系统自带的是Firefox浏览器&#xff0c;需要安装Chrome浏览器&#xff0c;但是在root用户下安装后发现&#xff0c;Chrome无法正常启动。安装及问题解决具体如下&#xff1a; 1. …

mysql ERROR 1045 和2058时(28000): 错误解决办法

mysql ERROR 1045 (28000): 错误解决办法 听语音|浏览&#xff1a;54286|更新&#xff1a;2018-02-23 14:34|标签&#xff1a;mysql 1234567分步阅读ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for us…

maven POM总结

可继承的字段 version property 其他占坑&#xff1a; parent import scope Dependency_Management中的scope是可以被继承的&#xff0c;http://maven.apache.org/pom.html#Dependency_Management name 不可继承 artifactId 不可继承 &#xff0c; 确定打包的最终名称。 这个…

JVM从入门到放弃——JVM内存模型

前言 Java和C或者是C相比较而言&#xff0c;最大的区别是C系列的程序员在编写代码的时候&#xff0c;总是要对程序中的变量进行释放内存的操作&#xff0c;所以在编写C或者是C的程序员需要格外的谨慎&#xff0c;因为他们对程序的内存有着很高的权限&#xff0c;这样虽然是特点…

485. Max Consecutive Ones - LeetCode

Question 485. Max Consecutive Ones Solution 题目大意:给一个数组,取连续1的最大长度 思路:遍历数组,连续1就加1,取最大 Java实现: public int findMaxConsecutiveOnes(int[] nums) {if (nums null) return 0;int result 0;int tmp 0;for (int i : nums) {if (i 1) {tmp;…

MacBook创建docker私有仓库docker server gave HTTP response to HTTPS client 问题处理办法

在 mac上搭建一个私有仓库&#xff0c;在向仓库push镜像时&#xff0c;会报如下错误&#xff1a; #docker push 192.168.163.131:5000/test Get https://192.168.163.131:5000/v1/_ping: http: server gave HTTP response to HTTPS client 百度了下答案发现都不试用mac版本的d…

Redis基础1(定义及基础)

Redis 定义&#xff1a;Redis是一个软件&#xff0c;帮助开发者对一台机器的内存进行操作 安装redis软件方法&#xff1a; 超链接地址&#xff1a;https://www.cnblogs.com/L5251/articles/9146881.html Python中下载依赖包 pip3 install redis 测试Redis是否安装成功 # 1、引入…

vue-cli安装

、安装vue-cli 命令&#xff1a;npm install vue-cli -g -g表示全局安装 2、初始化项目 命令&#xff1a;vue init webpack my-project 使用vue命令初始化项目&#xff0c;并使用webpack打包 此时会跳出一系列问题&#xff0c;除了eslint那一项&#xff0c;其余的均可回答yes&a…

修复病毒破坏的文件关联并恢复程序图标

1.破坏文件关联的两种方式&#xff1a; &#xff08;1&#xff09;修改特定扩展名文件的对应名称。以.exe文件为例&#xff1a; 正常注册表中&#xff0c;.exe文件对应名称为&#xff1a; HKEY_CLASSES_ROOT\.exe &#xff08;默认&#xff09; exefile 病毒为…

双击程序后系统弹框“您无权访问此程序”的解决办法

xp下&#xff1a;我的电脑>工具>文件夹选项>查看&#xff0c;勾掉使用简单文件共享选项。如下图&#xff1a; 此时&#xff0c;在右键点击程序图标时&#xff0c;选项卡中会出现“安全”选项卡。如下图&#xff1a; 修改everyone为Administrator...并设置完全控制权限…

adb常用操作命令

1、adb devices 查看当前链接设备&#xff0c;列出连接到计算机的Android设备或者模拟器 2、adb install <apk文件路径> 安装软件 3、adb uninstall <软件名> 卸载apk之前要先查看报名&#xff1a; 知晓包名之后&#xff0c;就可以运用命令卸载该APK 4、adb shell …

轻量级ORM框架 【Dapper】 的使用

ORM是什么&#xff1f; 从字面理解&#xff0c;O是Object&#xff0c;对象&#xff1b;R是Relation&#xff0c;关系&#xff1b;M是Mapping&#xff0c;映射。所以&#xff0c;用一句话概括就是&#xff1a;ORM是一种对象关系映射的技术。 Dapper 是.NET下的一种ORM框架。 Dap…

系统提示一个程序正在被另一个程序调用,如何知道是被哪个程序调用

今天在处理一个病毒时&#xff0c;发现病毒文件无法复制。于是利用processxp找到了病毒文件是被哪个文件调用&#xff0c;然后用md关闭了调用句柄后成功复制文件。具体情况如下&#xff1a; 为了找到是哪个程序调用了befsvc.exe&#xff0c;打开processexplorer.exe&#xff0c…

通过修改explorer.exe内存隐藏文件及注册表项

记录今天分析的一个隐藏自身及注册表项的病毒。 1.概述&#xff1a; &#xff08;1&#xff09;此病毒文件为路径为&#xff1a;C:\Windows7\4D525EC1C14.exe&#xff0c;且注册了自启动项&#xff1a; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run […

WPF xaml中列表依赖属性的定义

WPF xaml中列表依赖属性的定义 原文:WPF xaml中列表依赖属性的定义列表内容属性 如上图&#xff0c;是一个列表标题排序控件&#xff0c;我们需要定义一个标题列表&#xff0c;从而让调用方可以自由的设置标题信息。 在自定义控件时&#xff0c;会遇到列表依赖属性&#xff0c;…