点击上方“方志朋”,选择“置顶公众号”

技术文章第一时间送达!

这是系列文章Sharding-jdbc文章的第一篇,本篇文章主要讲述如何搭建Mysql的主从。搭建环境为centos 7.5,数据库版本为5.7。需要三台虚拟机,一主两从,读者可以在自己的电脑上创建虚拟机,也可以在云服务商买三台,按小时计费,一小时几毛钱,比较实惠。Ip分配如下:

  • 10.0.0.5 主

  • 10.0.0.13 从

  • 10.0.0.17 从

安装Mysql 5.7

下载yum源

 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

本地安装yum源

yum localinstall mysql57-community-release-el7-11.noarch.rpm

检查 mysql 源是否安装成功

 yum repolist enabled | grep "mysql.*-community.*"

出现以下信息,说明安装成功:

mysql-connectors-community/x86_64    MySQL Connectors Community              108
mysql-tools-community/x86_64         MySQL Tools Community                    90
mysql57-community/x86_64             MySQL 5.7 Community Server              347

使用 yum install 命令安装Mysql:

yum install -y mysql-community-server

这个安装过程时间可能较长。安装成功后,启动mysql:

systemctl start mysqld

启动完成后,查看Mysql的状态:

systemctl status mysqld

上述命令显示以下信息,则安装成功:

● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since Thu 2019-06-20 10:24:39 CST; 4s agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlProcess: 13879 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)Process: 13799 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)Main PID: 13883 (mysqld)CGroup: /system.slice/mysqld.service└─13883 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

设置开机启动:

systemctl enable mysqld

修改Mydql 密码

mysql 安装完成之后,生成的默认密码在 /var/log/mysqld.log 文件中。使用 grep 命令找到日志中的密码。

grep 'temporary password' /var/log/mysqld.log

上面的命令显示的密码如下:

2019-06-20T02:24:34.544392Z 1 [Note] A temporary password is generated for root@localhost: SrwXhkgt9t+;

首次登录mysql,修改密码:

mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Forezp@2019';

允许远程登录

修改 root 为允许远程连接,生产环境不建议:

mysql> use mysql;
mysql> UPDATE user SET Host='%' WHERE User='root';
mysql> flush privileges;

开启日志(非必须)

(非必须)开启sql语句的日志,生产环境不建议开启:

查看日志目录,并开启sql语句的日志:

mysql>  show variables like '%general_log%';
mysql>  set global general_log=on;

开启后,重启Mysql ,上述开启日志配置将失效。

Mysql的主从配置

机器准备

在三台机器上按照上面的步骤安装完Mysql5.7,三台机器的ip分别为:

  • 10.0.0.5 主

  • 10.0.0.13 从

  • 10.0.0.17 从

在三台机器上分别创建2个数据库,分别为cool和cool2,字符编码为utf8:

CREATE DATABASE `cool` CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `cool2` CHARACTER SET utf8 COLLATE utf8_general_ci;

关闭防火墙

要保证防火墙3306端口开放,如果只是为了学习,可以直接关闭防火墙。

centos关闭防火墙方法:service iptables stop或者systemctl stop firewalld

master 节点配置

在10.0.0.5机器上配置

vim /etc/my.inc

#server-id给数据库服务的唯一标识
server-id=1
#
##log-bin设置此参数表示启用binlog功能,并指定路径名称
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
##设置日志的过期天数
expire_logs_days=7
binlog-do-db=cool
binlog-do-db=cool2
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
  • 这里的server-id用于标识唯一的数据库,在从库必须设置为不同的值。

  • binlog-ignore-db:表示同步的时候忽略的数据库

  • binlog-do-db:指定需要同步的数据库

重启mysql,配置生效,执行以下的命令:systemctl restart mysqld

重启成功后,登录mysql。

赋予从库权限账号,允许用户在主库上读取日志,赋予10.0.0.13和10.0.0.17也就是Slave机器有File权限, 只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。

mysql> grant FILE on *.* to 'root'@'10.0.0.13' identified by 'Forezp@2019';
mysql> grant replication slave on *.* to 'root'@'10.0.0.13' identified by 'Forezp@2019';
mysql> flush privileges;
mysql> grant FILE on *.* to 'root'@'10.0.0.17' identified by 'Forezp@2019';
mysql> grant replication slave on *.* to 'root'@'10.0.0.17' identified by 'Forezp@2019';
mysql> flush privileges;

这里的用户是同步的时候从库使用的用户。

重启mysql(systemctl restart mysqld),登录mysql,查看主库信息

mysql> show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000010 |      154 | cool,cool2   | information_schema,sys,mysql,performance_schema |                   |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)

File是同步会使用到的binlog文件,Position是同步的时候也要用到的。

配置从库

1、修改/etc/my.conf

log-bin=mysql-bin
server-id=3
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
replicate-do-db=cool
replicate-do-db=cool2
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

注意:两个从库的server-id不一样,需要唯一。

2.修改完/etc/my.cnf后,重启一下mysql(systemctl restart mysqld)

进入Slave的mysql控制台,执行下面操作:

mysql> stop slave;
mysql> change master to master_host='10.0.0.5',master_user='root',master_password='Forezp@2019',master_log_file='mysql-bin.000010', master_log_pos=154;
start slave;

注意:上面的masterlogfile是在Master中show master status显示的File, 而masterlogpos是在Master中show master status显示的Position。

配置第二个从库的时候,需要重新从matser获取File和position。

3.然后可以通过show slave status查看配置信息。

mysql> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.0.0.5Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000010Read_Master_Log_Pos: 154Relay_Log_File: VM_0_13_centos-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000010Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: cool,cool2Replicate_Ignore_DB: mysqlReplicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:

上面的信息有SlaveIORunning: Yes和SlaveSQLRunning: Yes,证明主从同步成功。

4.出错清理掉之前的配置,防止同步已经同步了的数据,执行以下命令:

mysql> stop slave;
mysql> reset slave all;

上述的步骤需要在2个从库中操作,操作完成后。可以在Master建表插入数据,然后再从2个库中查看,如果2个都有数据,则证明主从数据库同步成功。

总结

本篇文章以实战的方式讲解如何搭建Mysql数据库的主从。后面的文章将讲述如何使用Sharding-jdbc+mybatis+springboot2,来实现数据库主从的读写分离。

参考资料

https://www.jianshu.com/p/1dab9a4d0d5f https://www.cnblogs.com/eleven24/p/7350000.html

热门内容:

  • 谈谈服务雪崩、降级与熔断

  • 从零开始搭建创业公司后台技术栈

  • 基于SpringBoot开发一个Restful服务,实现增删改查功能

  • 开发者说:基于 Nacos 的网关灰度路由和服务权重灰度

  • 如何在微服务架构中实现安全性?

  • Spring Cloud Alibba教程:Sentinel的使用

感谢搓一下“在看

Sharding-jdbc教程:Mysql数据库主从搭建相关推荐

  1. Mysql数据库主从搭建

    主库服务器:192.168.1.100 从库服务器:192.168.1.101 在两台服务器上安装mysql, yum -y install mysql mysql-server mysql-deve ...

  2. MySql数据库主从配置详细教程

    MySql数据库主从配置详细教程 本文将讲解mysql数据库的主从配置方法.mysql数据库进行主从配置后,可以实现数据库的备份.同时应用也可以实现读写分离,提高应用的并发量. 1.主从原理 主从原理 ...

  3. mysql数据库主从同步配置教程--数据库同步

    背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的方法来实现.下面把步骤记录一下. 环境和拓扑 操作系统:Centos6.6 X64 mysql版本:5.1.73 Master: ...

  4. java mysql教程基于_java基于jdbc连接mysql数据库功能实例详解

    本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JD ...

  5. JDBC连接MySQL数据库,访问数据库信息完成登录功能——保姆级详细教程(附所有java和jsp源代码)

    目录 前言 JDBC的介绍 通过JDBC连接MySQL数据库 导入mysql驱动 连接数据库 连接数据库 判断连接是否成功 使用数据库实现登录 获取前端表单的用户输入 判断用户名和密码为空 查询表 判 ...

  6. IDEA使用JDBC连接MySQL数据库详细教程

    首先需要保证你已经成功安装mysql 接下来下载连接MySQL数据库的驱动 使用JDBC连接MySQL数据库的驱动为Connentor/J,这里以最新版本的8.0为例 解压zip文件,随便解压到一个地 ...

  7. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  8. JDBC连接MySQL数据库及示例

    JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  9. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

最新文章

  1. python 冒泡排序_Python中的冒泡排序
  2. 【Hihocoder - offer编程练习赛86 - C】跳数游戏(STLset或map预处理,dp)
  3. qsplitter 折叠_河南断桥折叠门效果
  4. Java即时类| hashCode()方法与示例
  5. python mysql in 参数_python mysql中in参数化说明
  6. 开启mongodb数据库命令行_【赵强老师】使用MongoDB的命令行工具:mongoshell
  7. tomcat更改端口序
  8. linux ssh客户端乱码,Win10专业版下Open ssh客户端乱码咋办?
  9. 16.深入分布式缓存:从原理到实践 --- 新的旅程
  10. SyntaxHighlighter3.0.83 配置
  11. html圆圈里面有数字,HTML + CSS:编号列表与数字圆圈
  12. python report_python之Reportlab模块
  13. 如何使用html制作网页
  14. Classloader整理
  15. 等级保护测评经验分享干货
  16. matlab fread 详细讲解
  17. Office办公软件各种神操作,看到第1个就傻眼了,建议收藏
  18. C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)
  19. Problem:机器翻译
  20. 如何统计二十六个英语字母(简便思想)

热门文章

  1. 【洛谷 1345】 奶牛的电信
  2. AngularJS2.0 教程系列(一)
  3. 判断类之间的父子关系
  4. ISAPI在IIS7上的配置
  5. 青少年编程竞赛交流群第050次活动录播
  6. 【组队学习】【32期】深入理解计算机系统
  7. 【NCEPU】徐韬:街景字符编码识别比赛
  8. 数据结构与算法:11 Leetcode同步练习(四)
  9. 【小贴士】在线画流程图工具
  10. 腾讯国风AI虚拟人学会作诗书法,背靠开源模型SongNet