默认情况下,复制是异步的,从站不需要永久连接以接收来自主站的更新。根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。

MySQL中复制的优点包括:

横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可能发生在一个或多个从站上。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。

数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。

分析 - 可以在主服务器上创建实时数据,而信息的分析可以在从服务器上进行,而不会影响主服务器的性能。

远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。

先去网站下载 https://dev.mysql.com/downloads/mysql/

压缩包有如下内容:

说明:

标准安装:安装 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common,和 mysql-community-libs-compat包。

标准安装之后的文件布局如下:

-开始安装

把文件上传到服务器,解压。

[root@localhost soft]# mkdir mysql8
[root@localhost soft]# tar -xvf mysql-8.0.-.el7.x86_64.rpm-bundle.tar -C /soft/mysql8/

然后进入解压目录安装:

[root@localhost soft]# cd mysql8/
[root@localhost mysql8]# yum install mysql-community-{server,client,common,libs}-*

选择y,最后出现Complete!

两台全部安装完后,进行配置

基于二进制日志文件位置的复制

传统方法基于master的二进制日志复制事件,并要求其中的日志文件和位置在masterslave之间同步。

1. 打开主服务器。去修改配置文件,设置日志文件名称和服务器ID,以及需要复制的数据库

[root@localhost mysql8]# vim /etc/my.cnf

2. 打开从服务器,配置服务器ID

3. 配置用户

每个从站使用MySQL用户名和密码连接到主站,因此主站上必须有用户帐户,从站可以使用该帐户进行连接。

3.1 先启动主服务器

[root@localhost mysql8]# systemctl start mysqld
[root@localhost mysql8]# systemctl status mysqld

然后查看初始密码

[root@localhost mysql8]# cat /var/log/mysqld.log | grep password

然后登陆

[root@localhost mysql8]# mysql -u root -p

一般要求你执行命令之前先重置密码

mysql> alter user user() identified by "Abc666-S";
Query OK, rows affected (0.01 sec)

=========================

我们会发现默认的密码强度要求太高了,太简单的不行比如1234会报错:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

查看当前策略

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | |
| validate_password.mixed_case_count | |
| validate_password.number_count | |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | |
+--------------------------------------+--------+
rows in set (0.00 sec)

然后设置一下等级即可:(如果密码长度你介意的话也可以改小,语句类似于下面这行)

mysql> set global validate_password.policy=LOW;
Query OK, rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | |
| validate_password.mixed_case_count | |
| validate_password.number_count | |
| validate_password.policy | LOW |
| validate_password.special_char_count | |
+--------------------------------------+-------+
rows in set (0.01 sec)

最后可以修改简单密码:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
Query OK, rows affected (0.01 sec) mysql> exit;
Bye 

=========================

回到正题,创建一个专门为复制服务的用户。

mysql> CREATE USER 'my_slave'@'%' IDENTIFIED BY '';
Query OK, rows affected (0.00 sec) mysql> GRANT REPLICATION SLAVE ON *.* TO 'my_slave'@'%';
Query OK, rows affected (0.01 sec) mysql> flush privileges;

caching_sha2_passwordsha256_password认证插件提供比mysql_native_password插件更安全的密码加密,并且caching_sha2_password的性能比sha256_password更好。

MySQL 8.0中创建新用户默认使用caching_sha2_password插件,必须设置安全连接。

要使用加密连接传输复制期间所需的二进制日志,主服务器和从服务器都必须支持加密的网络连接。如果任一服务器不支持加密连接,则无法通过加密连接进行复制。

我们也可以使用MySQL5.7 的默认身份认证插件:mysql_native_password

指定插件即可:

CREATE USER 'my_slave'@'%' IDENTIFIED WITH mysql_native_password BY '';
ALTER USER 'my_slave'@'%' IDENTIFIED WITH mysql_native_password BY '';

3.2.  查看Master状态

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, rows affected (0.24 sec) mysql> SHOW MASTER STATUS;
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql-log-bin. | | test | mysql | |
+----------------------+----------+--------------+------------------+-------------------+
row in set (0.02 sec) mysql>

4. 开启防火墙

firewall-cmd --zone=public --add-port=/tcp --permanent

systemctl restart firewalld

5. 配置从服务器,连接到主服务器

5.1 第一次进入先改密码

[root@localhost mysql8]# cat /var/log/mysqld.log | grep password
--26T12::.691834Z [Note] [MY-] [Server] A temporary password is generated for root@localhost: Yg*CpFsrn0A7
[root@localhost mysql8]# mysql -u root -p
Enter password: mysql> alter user user() identified by "Abc666-S";
Query OK, rows affected (1.02 sec)

5.2 设置连接主服务器的信息

如果使用默认的插件:caching_sha2_password

mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.192.128',
-> MASTER_USER='my_slave',
-> MASTER_PASSWORD='',
-> MASTER_LOG_FILE='mysql-log-bin.000009',
-> MASTER_LOG_POS=,
-> MASTER_SSL=;
Query OK, rows affected, warnings (0.09 sec)

如果使用MySQL5.7 的插件:mysql_native_password

mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.192.128',
-> MASTER_USER='my_slave',
-> MASTER_PASSWORD='',
-> MASTER_LOG_FILE='mysql-log-bin.000009',
-> MASTER_LOG_POS=;
Query OK, rows affected, warnings (0.09 sec)

5.3 最后启动slave线程

mysql> start slave;
Query OK, rows affected (0.10 sec) mysql> show slave status\G;
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.192.128
Master_User: my_slave
Master_Port:
Connect_Retry:
Master_Log_File: mysql-log-bin.
Read_Master_Log_Pos:
Relay_Log_File: localhost-relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-log-bin.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno:
Last_Error:
Skip_Counter:
Exec_Master_Log_Pos:
Relay_Log_Space:
Until_Condition: None
Until_Log_File:
Until_Log_Pos:
Master_SSL_Allowed: Yes
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno:
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id:
Master_UUID: b580af4c--11e9--000c295a3c5c
Master_Info_File: mysql.slave_master_info
SQL_Delay:
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count:
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position:
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key:
Network_Namespace:
row in set (0.05 sec)

6. 两台服务器都已经配好,现在看一下是否会同步。

..

如果要停止从服务器的复制线程

stop slave;

7. 附

MySQL默认是开启SSL的,查看:

show variables like '%ssl%';

基于二进制日志文件的复制到此为止

基于全局事务标识符的复制

基于全局事务标识符(GTID)的方法是事务性的,因此不需要处理这些文件中的日志文件或位置,这极大地简化了许多常见的复制任务。在主服务器上提交的所有事务将应用于从服务器,使用GTID进行复制可确保主服务器和从服务器之间的一致性。

未完待续

MySQL8.0.19主从环境搭建(CentOS7)的更多相关文章

  1. win10安装两个不同版本的mysql(mysql5.7和mysql-8.0.19)

    win10中安装mysql5.7后,安装mysql-8.0.19 在D:\mysql-8.0.19-winx64目录下创建一个my.ini文件 [mysqld] # 设置3307端口 port # 设 ...

  2. CentOS 6.5系统使用yum方式安装LAMP环境和phpMyAdmin,mysql8.0.1/mysql5.7.22+centos7,windows mysql安装、配置

    介绍如何在CentOs6.2下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make&am ...

  3. 【转】mysql8.0 在window环境下的部署与配置

    [转]mysql8.0 在window环境下的部署与配置 今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置 ...

  4. LNMP环境搭建--Centos7

    LNMP环境搭建--Centos7 | 刘鹏--博客 盒子 盒子 博客 分类 搜索 文章目录 在Centos7环境安装LAMP环境,备忘哈哈. 准备 首先去官网下载php,nginx 编译安装php ...

  5. Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程

    一.修改hosts文件 在主节点,就是第一台主机的命令行下; vim /etc/hosts 我的是三台云主机: 在原文件的基础上加上; ip1 master worker0 namenode ip2 ...

  6. Hadoop2.5.0伪分布式环境搭建

    本章主要介绍下在Linux系统下的Hadoop2.5.0伪分布式环境搭建步骤.首先要搭建Hadoop伪分布式环境,需要完成一些前置依赖工作,包括创建用户.安装JDK.关闭防火墙等. 一.创建hadoo ...

  7. Win10下mysql5.5和mysql8.0.19共存

    Win10下mysql5.5和mysql8.0.19共存 需求:由于之前做的项目用的是mysql5.5,而新接的项目指定用mysql8,需要myql5..5和8同时存在运行. 前提:电脑已经安装mys ...

  8. centos7 二进制安装mysql-8.0.19

    安装包下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz 1.检 ...

  9. dbdeployer 快速安装MySQL8.0各测试环境

    Linux系统必须安装有Go语言: 下载最新的包:https://github.com/datacharmer/dbdeployer/releases     解压:  tar -xzf dbdepl ...

随机推荐

  1. vue框架入门和ES6介绍

    vue框架入门和ES6介绍 vue-mvvm模式,vue是一种轻量级的前端框架,主要为模板渲染,数据同步,组件化,模块化,路由等. https://cn.vuejs.org/ 源码:https://g ...

  2. datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)

    一.动态定义列头 在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对 我自定义了Mock数据,用于前端自己交互. 其中,rowdata用于存放传回的数据,co ...

  3. git常用命令总结--廖雪峰老师Git教程命令总结

    学习了廖雪峰老师的Git教程之后的命令总结,重点关于git和远程仓库的东西. 如果没有学过,这是传送门 下面这个图很重要 一.git初始化本地仓库和配置 echo "想输入到文件的内容,一般 ...

  4. python带参函数(计算器脚本解释标注)

    环境 python 3.* def operator(op1,op2,opfu): #定义符号函数,op1表示第一个运算数值,op2表示第二个,opfu表示运算符号 if opfu not in '+ ...

  5. PhpStorm 常用快捷键

    PhpStorm 常用快捷键 File Structure 路径: Main menu > Navigate > File Structure 显示当前文件的类和函数结构,便于查找当前文件 ...

  6. Raneto中文搜索支持

    背景 因业务部门需要在线软件使用说明文档,但我们资源不足,故我想找一个开源的知识库,发现 Raneto不错,决定使用. 官方文档相当清晰,部署完成,发布一些文章,启动项目,交由业务同事测试使用,于是我 ...

  7. June 28th. 2018, Week 26th. Thursday

    You cannot change the circumstances but you can change yourself. 既然改变不了环境,那就改变自己. From Jim Rohn. Rec ...

  8. Web后台快速开发框架(.NET Core)

    Web后台快速开发框架(.NET Core) Coldairarrow 目录 目录 第1章    目录    1 第2章    简介    3 第3章    基础准备    4 3.1    开发环境 ...

  9. html语义化标签

    1. HTML语义化的理解 根据内容的结构化,选择合适的标签,便于开发出读者阅读.写出更优雅的代码,让浏览器的爬虫和机器很好地解析. 好处: (1). 为了在没有css时,也可以很好地呈现出内容结构, ...

  10. C#类继承中构造函数的执行序列

    不知道大家在使用继承的过程中有木有遇到过调用构造函数时没有按照我们预期的那样执行呢?一般情况下,出现这样的问题往往是因为类继承结构中的某个基类没有被正确实例化,或者没有正确给基类构造函数提供信息,如果 ...