mysql主从架构搭建_mysql主从架构搭建

背景知识:

主从这个架构可以实现数据备份,数据在多个服务器上分布等等,当然最主要的优点是可以实现负载均衡,将写操作交给主节点,读操作交给从节点。

mysql官网有很多版本,例如Enterprise(企业版需要付费,当然可以试用30天),Community(社区版,开源但是官方不提供技术支持),当然我们常用的也是社区版,本文是基于社区版的。

mysql的安装也有源码安装和二进制免安装等等方法,本文的mysql是通过二进制免安装的方式安装的

本文使用的环境是centos

1.首先下载二进制免安装版的mysql:mysql社区版下载,进入社区版下载页后选择 MySQL Community Server (GPL),选择要下载的mysql版本:

0fa3c1406efd9142c9ae47db6ae25e7b.png

我这里使用的是mysql5.7这个版本,点击之后,选择如下:

5a80ba78ee9957f936feea2bed01eed5.png

嫌麻烦的小伙伴可以直接运行下面的命令安装:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

2.下载好之后解压重命名为mysql-3306然后复制一份,重命名为mysql-3307,我们将3306当作主节点,3307当作从节点:

#解压

tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

#重命名

mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql-3306

#复制一份

cp -r mysql-3306 mysql-3307

3.创建几个目录,data,logs,config,sockets,用来管理mysql的相关文件:

mkdir data logs config sockets

1aedf7932e81f93253b2effeb6a5e942.png

4.进入config目录,创建3306.conf以及3307.conf两个文件,文件的内容如下:

[mysqld]

user=root #设置mysql的启动用户,我这里直接使用root,读者可以创建用户组和用户指定操作

character-set-server=utf8

port=3306

socket=/root/mysql/sockets/3306.sock #设置套字节(/root/mysql/sockets为刚刚创建的sockets的路径,3306.sock可以随意命名,下面的data,logs也是如此)

basedir=/root/mysql/mysql-3306 #mysql-3306所在的位置

datadir=/root/mysql/data/3306 #设置mysql的数据存放目录(也是bin_log的存放的地方)

server-id=1 #唯一标识,每台mysql服务器必须唯一

log-bin=master-bin #开启bin-log并将此值作为二进制文件名的前缀

binlog_format=ROW #设置binlog的格式,主要有STATEMENT,ROW,FIXED

#设置不需要同步给从节点的数据库

binlog-ignore-db=mysql

binlog-ignore-db=sys

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

[mysqld_safe]

log-error=/root/mysql/logs/3306.log #错误日志

#以下的3307的配置

[mysqld]

user=root

character-set-server=utf8

port=3307

socket=/root/mysql/sockets/3307.sock

basedir=/root/mysql/mysql-3307

datadir=/root/mysql/data/3307

server-id=2

#设置从节点只读,注意如果是超级管理登录从节点仍然是可以写的,该配置只对普通用户有效

read_only=1

#设置relay-log的路径和名称,如果不设置的话,默认路径是datadir设置的路径,默认文件名是:当前主机名-relay-log

relay-log=relay-log-bin

[mysqld_safe]

log-error=/root/mysql/logs/3306.log #错误日志

5.接下来让我们开启mysql服务:

#进入mysql-3306目录,执行如下操作进行初始化

# -insecure的作用是不设置密码,如果省略的话mysql会生成一个随机密码

./bin/mysqld --defaults-file=/root/mysql/config/3306.conf --initialize-insecure

#之后再执行如下命令启动

./bin/mysqld --defaults-file=/root/mysql/config/3306.conf

#同理启动3307mysql服务

6.可能有读者在启动mysql服务器的时候会报:error while loading shared libraries: libaio.so,运行如下命令安装即可:

yum install libaio

7.连接3306主mysq服务器:

#进入mysql-3306运行如下命令:

#--socket的值就是我们在mysql配置文件中配置的socket值

./bin/mysql -uroot --socket=/root/mysql/sockets/3306.sock

#同理连接3307的mysql服务器

8.执行如下命令查看master状态并进行重置:

show master status;

reset master;

b8c8cdd5e5667b334c5ed372c42ca9a6.png

9.在主服务器上设置一个用户用于从服务器从主服务器中复制数据时使用:

#创建用户

create user 'salve' identified by '666666';

#赋予复制权限

GRANT REPLICATION SLAVE ON *.* TO 'salve'@'%';

#命令解释

create user 用户名 identified by '密码';

grant 权限 on 数据库名.表名 to '用户名'@'域名';

*表示所有,*.*表示所有的数据库和数据库中的表

'%'所有本地和远程都可以

localhost 本地

ip地址 指定ip登录

10.以上操作没有问题之后,我们连接3307服务器进行从节点的配置:

#首先关闭

stop slave;

#参数配置

change master to

master_host='127.0.0.1', #主从服务的地址

master_port=3306, #主服务器的端口

master_user='slave', #用于从复制的用户名,即第九步创建的

master_password='666666', #密码

master_log_file='master-bin.000001', #主服务器的binlog日志名称,查看第八步

master_log_pos=597; #偏移量

#开启

start slave;

至此我们的mysql主从架构已经搭建完成。小伙伴可以自行测试,在master节点写入的数据是否会同步到slave节点。

这里有一个巨坑:

我以为设置了binlog_ignore_db之后,在主节点创建的用户:执行语句create user test identified by '1234' 不会被同步到从节点,因为创建的用户会被存储到系统表user中,而该表是在mysql库下的,而mysql这个数据库在上面的配置中被设置了ignore,但是实际登录到从节点之后会发现用户test也被同步到了从节点。这是因为mysql是根据use关键字来判断哪些库不被记录到binlog中,因此如果将上面的创建语句改成:use mysql; create user test1 identified by '1234' 那么再登录从节点会发现test1用户没有被同步。详细解释

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

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

相关文章

Linux快速搭建FTP服务器

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序…

mysql 连接 监控_mysql监控优化(一)连接数和缓存

一、mysql的连接数MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,连接数少的话,在大并发下连接数会不够用,会有很多线程在等待其他连接释放,就可能会导…

集合框架(一) ----------Map集合遍历的方法

import java.util.*; /** * Map集合遍历的方法 * author Administrator * */public class Test2 { public static void main(String[] args) { Map<String,String> mapnew HashMap<String,String>(); /*Java 提供两种不同的类型&#xff1a; * 引用类型和原始类型&…

mysql事务总结_MySQL数据库和相关事务总结

以下的文章主要向大家描述的是MySQL数据库和相关事务&#xff0c;在实际操作中有很多人都认为MySQL数据库对事务处理是不支持的&#xff0c;其实&#xff0c;只要MySQL数据库版本支持BDB或是InnoDB表类型&#xff0c;那么你的MySQL就具有事务处理的能力。这里面&#xff0c;又以…

please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法

php安装扩展mysqli的实现步骤及报错解决办法terminal#cd php-5.3.6/ext/mysqli#/usr/local/webserver/php/bin/phpize#./configure --with-php-config/usr/local/webserver/php/bin/php-config#make#make instal报错&#xff1a;checking for MySQLi support... yeschecking wh…

day35-hibernate映射 03-Hibernate持久态对象自动更新数据库

持久态对象一个非常重要的能力:自动更新数据库。 package cn.itcast.hibernate3.demo1;import static org.junit.Assert.*;import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test;import cn.itcast.utils.HibernateUtils;/*** Hibernate的测…

mysql视图中调用函数写法_从视图中调用函数

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":5,"count":5}]},"card":[{"des":"阿里云函数计算(Function Compute)是一个事件…

微信 小程序 常见错误

VM148:2 pages/aaa/aaa.jsonExpecting STRING,NUMBER,NULL,TRUE,FALSE,{,[, got EOF 意思是 子组件的 json 文件不能为空 至少填一个{} appservice:18 pages/home/home 出现脚本错误或者未正确调用 Page() 原因是没有在相应页面的.js文件中调用Page&#xff08;&#xff09;&am…

mysql 角色管理_MySQL 8 用户和角色管理入门

MySQL 8.0 正式版目前已发布&#xff0c;MySQL 8.0 增加了很多新的功能&#xff0c;具体可参考「MySQL 8.0 正式版 8.0.11 发布&#xff01;」一文。MySQL 8.0 在用户管理方面增加了角色管理&#xff0c;默认的密码加密方式也做了调整&#xff0c;由之前的 SHA1 改为了 SHA2。同…

go 删除 文件 某行_Go实战--用echo嵌入静态资源

生命不止&#xff0c;继续 go go go !!!使用 Go 开发应用的时候&#xff0c;有时会遇到需要读取静态资源的情况。比如开发 Web 应用&#xff0c;程序需要加载模板文件生成输出的 HTML。在程序部署的时候&#xff0c;除了发布应用可执行文件外&#xff0c;还需要发布依赖的静态资…

python 运维自动化之路 Day2

学习内容&#xff1a; 1、模块初识 2、Pyc是什么 3、Python数据类型 4、数据运算 5、bytes数据类型 6、列表和元组的使用 7、字符串常用操作 8、字典的使用 1、模块初识 如果用 python 解释器来编程&#xff0c;从 Python 解释器退出再进入&#xff0c;那么你定义的所有的方法和…

mysql多源复制 知乎_MySQL多主一从(多源复制)同步配置

&#xfeff;>多主一从&#xff0c;也称为多源复制&#xff0c;数据流向。这是小编的服务器部署的一次小尝试&#xff0c;实际工作中还没遇到过形式主库1 -> 从库s主库2 -> 从库s主库n -> 从库s应用场景数据汇总&#xff0c;可将多个主数据库同步汇总到一个从数据库…

关于算法模板和规范的说明

这里记录的算法模板和规范仅供个人使用&#xff0c;可能会存在BUG。由于使用本博客模板导致的BUG及其负面影响&#xff0c;本人概不负责。转载于:https://www.cnblogs.com/hzs2000/p/6682699.html

aMDcpu不支持mysql_Oracle 11.2.0.1在AMD CPU 64位硬件,32位操作系统下的BUG 8670579

通过查询meatlink原因是在ORACLE11.2.0.1 AMD 64位CPU下安装了32位的操作系统&#xff0c;触发了bug 8670579&#xff0c;那要解决该问题只需打上86705bug 8670579硬件信息&#xff1a;CPU:AMD X6在执行dbca的时候也报错如下&#xff1a;[Oracleyorkshi ~]$ dbca## An unexpect…

《网络攻防》第6周作业

20169310 2016-2017-2 《网络攻防实践》第6周学习总结 教材学习内容总结 本周主要学习了《网络攻防---技术与实践》第5、6章的内容&#xff0c;主要学习了 TCP/IP网络协议攻击 和 网络安全防范技术 TCP/IP网络协议攻击概述 网络安全的属性&#xff1a;机密性 、完整性 、可用性…

python读ad域日志_Python实现AD域认证

Python 通过ldap进行ad域账号的校验。首先需要安装python-ldap的模块 http://www.python-ldap.org/。 在这里用的是windows系统&#xff0c;当然比较容易&#xff0c;下载地址 http://pypi.python.org/pypi/python-ldap/。安装后在python 的交互环境里输入import ldap 如果没有…

nios ii小实验——第一个demo指导书

1.新建工程&#xff1a;打开Quartus II 13.0&#xff0c;点击File->New Project Wizard&#xff0c;点击Next后可以看到如图2所示的对话框&#xff0c;选择工程路径给工程命名&#xff08;注意&#xff1a;工程名必须和顶层模块名一致&#xff0c;否则编译会报错&#xff09…

js动态时间(转)

html代码 <span id"timeShow" show_cur_times()></span>js代码 $(function(){//设置1秒调用一次show_cur_times函数setInterval("show_cur_times()",100); });function show_cur_times(){ //获取当前日期var date_time new Date();//定义星期…

shell设计精髓_交互设计精髓

了解数字产品的设计过程工业设计师 Victor Papanek 认为&#xff0c;设计是“为赋予有意义的秩序&#xff0c;作出有意识或直觉的努力”。“All men are designers. All that we do, almost all the time is design, for design is basic to all human activity. The planning …

谈谈我对Javascript中This对象的理解

this 指针的隐式赋值 this总是指向调用该方法的对象&#xff1b; 在事件中&#xff0c;this指向触发这个事件的对象&#xff0c;特殊的是&#xff0c;IE中的attachEvent中的this总是指向全局对象Window&#xff1b; 显示操纵 this 指针 Javascript引擎通过以下两种方式允许我们…