为什么使用主从架构?
1、实现服务器负载均衡;
2、通过复制实现数据的异地备份;
3、提高数据库系统的可用性;
4、可以分库【垂直拆分】,分表【水平拆分】;

主从配置的前提条件
1、MySQL版本一致;
2、MySQL中的数据一致;
      不一致就把它们搞一致!
3、操作前停止一切更新操作(写入、更新、删除等);
4、服务器时间一致

主:192.168.1.60
从:192.168.1.35
注意:35、60服务器安装mysql省略,mysql用户名/密码:root/attack。

注意点:
1、一定要保证两台服务器的时间是同步的,如果不同步无法实现mysql主从配置;
2、设置服务器具体时间:date -s 12:23:23,通过xshell客户端实现;

1、配置master(主服务器)

vim /etc/my.cnf
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=

查询master(主服务器)的状态

show master status;


File列和Position列的值一会儿我们要用到。

在主服务器上创建备份专用帐户

mysql -uroot -pattack -e "GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'backup'@'192.168.1.%' IDENTIFIED BY 'Attack@123';" ###推荐使用
mysql -uroot -pattack -e "GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'backup'@'192.168.1.160' IDENTIFIED BY 'Attack@123';" mysql -uroot -pattack -e "flush privileges;" ###刷新权限

备份专用帐户及密码:backup/Attack@123

2、配置slave(从服务器)

vim /etc/my.cnf
#[可选]启用二进制日志
log-bin=mysql-bin
#[必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=35

如果你的从服务器下面再挂从服务器,启用二进制日志就是必选的!

注意:由于此时的mysql已经启动过,会自动保留一个uuid的服务编号,这个编号文件(auto.cnf)如果不删除,无法实现主从;

3、重启mysql服务

/etc/init.d/mysqld restart
service mysqld restart

重启的目的是使用刚才的配置生效,主从都需要重启;

注意:服务名是“mysqld”,不是某同学文章中的“mysql”!

4、配置Slave启动主从复制
a、进入到mysql命令窗口之中:mysql -uroot -pattack
b、如果现在你已经启动从主机,先关闭:stop slave

c、如果停止之后还想重新启动,则必须清除所有的日志信息:flush logs;

d、启动从服务器复制功能

//注意master_log_pos值经常会变化,记得执行如下命令前先执行"show master status;",得到最新的Position列,154数字前后无单引号。
change master to master_host='192.168.1.60',master_user='backup',master_password='Attack@123',master_log_file='mysql-bin.000001',master_log_pos=154; start slave;

参数描述:
master_host=主服务器IP
master_user=在主服务器上创建的备份用户名
master_password=备份用户密码
master_log_file=查询master(主服务器)的状态得到的File列的值
master_log_pos=Position列的值
start slave:启动从服务器复制功能

5、检查从服务器复制功能状态

mysql -uroot -pattack -e "show slave status\G;" 


主要查看以下两项:

Slave_IO_Running: Yes
lave_SQL_Running: Yes

Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。

我在一次配置过程中忘记在主服务器上创建备份用户,Slave_IO_Running 就一直处于“connect”状态;或者防火墙没关闭导致无法连接master服务器。

6、主从服务器测试
在主服务器上执行以下操作:

mysql -uroot -pattack

create database db_test_slave;
use db_test_slave;
create table tb_test(id int(3), name varchar(50));
insert into tb_test values(1,'hello slave');
show databases;

在从服务器上执行以下操作:

mysql -uroot -pattack -e "show databases; use db_test_slave; select * from tb_test;" 

查看输出:

+--------------------+
| Database |
+--------------------+
| information_schema |
| db_test_slave |
| mysql |
| performance_schema |
| sys |
+--------------------+
+------+-------------+
| id | name |
+------+-------------+
| 1 | hello slave |
+------+-------------+

至此,mysql主从配置完成。

一开始讲了主从复制的一些好处,但是单一的主从复制也有其不足:当更新操作增加到一定程度后,主服务器的任务会过分繁重,成为瓶颈,从而使系统性能大幅度下降。另外当主机出现故障时,整个系统都涉及更新的功能都不能正常使用,因此系统的可靠性依然不高。

在主节点对sql进行update、delete操作时,抛出如下异常:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决办法:
在/etc/my.cnf文件中,新增如下内容,保证35和60的sql-mode配置一致:
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
重启mysql。

mysql5.7主从复制配置——读写分离实现的更多相关文章

  1. 利用mycat实现基于mysql5.5主从复制的读写分离

    整体步骤: 1.准备好两台服务器,一台作为主数据库服务器,一台作为从服务器,并安装好mysql数据库,此处略 2.配置好主从同步 3.下载JDK配置mycat依赖的JAVA环境,mycat采用java ...

  2. MySQL5.6 Replication主从复制(读写分离) 配置完整版

    MySQL5.6 Replication主从复制(读写分离) 配置完整版 MySQL5.6主从复制(读写分离)教程 1.MySQL5.6开始主从复制有两种方式: 基于日志(binlog): 基于GTI ...

  3. mysql实现主从复制、读写分离的配置方法(二)

    由于接触主从复制,读写分离的时间比较短,应用还不够熟练,目的是能通过MyCat实现基础的读写分离操作. 其核心功能是分库分表,配合数据库的主从模式还可实现读写分离. 1. 测试环境 一台win10主机 ...

  4. Mysql主从配置+读写分离

    Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. ...

  5. mysql主从复制以及读写分离

    之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...

  6. 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

    一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...

  7. 04 . Mysql主从复制和读写分离

    Mysql AB复制 ​ AB复制又称之为主从复制,用于实现数据同步,实现Mysql的AB复制时,数据库的版本尽量保持一致,如果不能保持一致,最起码从服务器的版本要高于主服务器,但是就无法实现双向复制 ...

  8. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  9. Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记

    GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...

随机推荐

  1. 适配android和iOS上position:absolute和input问题

    //适配android上absolute和input的问题var oHeight = $(document).height(); //屏幕当前的高度$(window).resize(function( ...

  2. XCode中安装cocoapods步骤

    Ruby是一种功能强大的面向对象的脚本语言 Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找.安装.升级和卸载软件包,非常的便 ...

  3. Write Markdown Syntax Online Document with Sphinx and Pandoc

    There is no doubt that we have to write doc while we are developing software. But How do you write d ...

  4. Leetcode--680. Valid Palindrome II(easy)

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...

  5. set_time_limit

    语法 : void set_time_limit (int seconds)说明 : 设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误.它预设的限制时间是30秒,max_execut ...

  6. Qt程序关于路径、用户目录路径、临时文件夹位置获取方法

    比如我们有一个程序在: C:/Qt/examples/tools/regexp/regexp.exe 1. 程序所在目录 QString QCoreApplication::applicationDi ...

  7. 1.buntu 安装redis

    方式一 :apt安装 在 Ubuntu 系统安装 Redi 可以使用以下命令: $sudo apt-get update $sudo apt-get install redis-server 启动 R ...

  8. linux时间格式总结

    原文:https://blog.csdn.net/drcwr/article/details/50971637 %%   a literal %   一个文字  %a   locale's abbre ...

  9. python 使用json格式转换

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  10. Windows的cmd窗口显示utf8字符

    用XeLaTeX的时候,查字体需要用fc-list命令,XeLaTeX用的都是utf编码,所以fc-list输出的字体信息也是utf编码.因此需要把cmd窗口也改成utf8编码才能看到这些字体信息.U ...