Linux企业运维—Nginx+mysql编译安装+主从复制+半同步复制+异步复制+延迟复制+并行复制+组复制

一、在redhat7.6上mysql8编译安装

1、mysql8的编译安装前的检查

cmake升级:(3.5版本以上)
下载:https://cmake.org/download/
安装:
# tar zxf cmake-3.18.1.tar.gz
# cd cmake-3.18.1
# ./configure
# make
# make install
升级gcc:(版本要求5.3以上)
设置centos源后安装:
# yum install centos-release-scl
# yum install devtoolset-7-gcc*
# scl enable devtoolset-7 bash
# which gcc
# gcc --version

2、编译安装mysql8

tar zxf mysql-boost-8.0.21.tar.gz
mkdir build
cd build

 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DSYSCONFDIR=/etc \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_BOOST=/root/mysql-8.0.21/boost/boost_1_72_0/ 

make 
make install

二、在redhat7.6上mysql5.7的编译安装

1、准备安装包、解压、安装cmake

yum -y install cmake

在这里插入图片描述

2、cmake编译mysql5.7

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DMYSQL_DATADIR=/data/mysql 
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 
-DWITH_EXTRA_CHARSETS=all 
-DDEFAULT_CHARSET=utf8mb4 
-DDEFAULT_COLLATION=utf8mb4_unicode_ci 
-DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0

可能需要安装,视具体安装模块确定

yum -y install gcc-c++
yum install ncurses-devel.x86_64 -y
make
make install

3、拷贝启动脚本

cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld

4、新建用户

 useradd -M -d /usr/local/mysql/ -s /sbin/nologin mysql

5、创建数据目录

cd ~
mkdir -p /data/mysql
chown mysql.mysql /data/mysql

6、添加变量

cd ~
vim .bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/lnmp/php/bin:/usr/local/mysql/bin
source  .bash_profile 

在这里插入图片描述

7、修改配置

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock

[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/var/run/mysqld.pid

/etc/init.d/mysqld start  ##启动mysql
/etc/init.d/mysqld stop   ##关闭mysql

8、初始化数据库

 mysqld --initialize --user=mysql #初始化数据库生成密码
 /etc/init.d/mysqld start	#mysql启动
 mysql_secure_installation	#安全初始化数据库

使用初始化生成的密码进入,并修改密码
在这里插入图片描述如果输入密码没有进入,需要执行rm -fr /data/mysql/*,重新执行上面的步骤

9、phpMyAdmin的使用

phpMyAdmin 是众多 MySQL图形化管理工具中使用最为广泛的一种,是一款使用PHP 开发的基于B/S模式的 MySQL 客户端软件,该工具是基于 Web 跨平台的管理程序,并且支持简体中文,phpMyAdmin 为开发人员提供了类似 Access,SQL Server 的图形化数据库操作界面,通过该管理工具可以对 MySQL 进行各种操作,如何创建数据库,数据表和生成 MySQL 数据库脚本文件等

下载地址

https://www.phpmyadmin.net/

将解压后的phpmyadmin移动到/usr/local/nginx/html/phpadmin
在这里插入图片描述
默认发布录加入index.php页面

vim /usr/local/nginx/conf/nginx.conf

        location / {
            root   html;
            index  index.html index.htm index.php index.jsp;
        }
        
nginx -t
nginx -s reload
vim /usr/local/lnmp/php/etc/php.ini		#修改权限

[Pdo_mysql]
1056 pdo_mysql.default_socket=/data/mysql/mysql.aock
1165 mysqli.default_socket = /data/mysql/mysql.sock

systemctl restart php-fpm.service	#重启php服务

此时浏览器访问http://172.25.73.1/phpadmin/index.php进入登陆界面,输入root用户和前面设定的密码即可进入
在这里插入图片描述新建数据库westos。新建表linux,包含name、passwd,并加入数据。
在这里插入图片描述在这里插入图片描述

三、mysql用户与授权

1. 创建用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username:要创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

2、授权

GRANT privileges ON databasename.tablename TO 'username'@'host';

privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*

用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权用以下命令:

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

3、设置与更改用户密码

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是当前登陆用户更改密码用:

SET PASSWORD = PASSWORD("newpassword");

4、撤销用户权限

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

privilege, databasename, tablename:同授权部分

5、删除用户

DROP USER 'username'@'host';

6、mysql加密连接

CREATE USER 'username'@'%' IDENTIFIED BY 'password' REQUIRE SSL;

四、mysql主从复制

将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致
在这里插入图片描述
主节点:172.25.73.1
从节点:172.25.73.2 | 172.25.73.3

1、将主节点的mysql安装到从节点

cd /usr/local/mysql
scp -r /usr/local/mysql/ server2:/usr/local/
scp -r /usr/local/mysql/ server3:/usr/local/
cd /etc
scp my.cnf server2:/etc/
scp my.cnf server3:/etc/

server2与server3
cd /usr/local/mysql/
cd support-files/
cp mysql.server /etc/init.d/mysqld
cd
vim .bash_profile
	/usr/local/mysql/bin
source .bash_profile
useradd -M -d /usr/local/mysql -b /sbin/nologin mysql
mkdir -p /data/mysql
chown mysql.mysql /data/mysql/

 mysqld --initialize --user=mysql #初始化数据库生成密码
 /etc/init.d/mysqld start	#mysql启动
 mysql_secure_installation	#安全初始化数据库

在这里插入图片描述

1、编辑主节点配置文件

vim /etc/my.cnf
###启用二进制日志文件
	server-id=1
	log-bin=mysql-bin
	log_slave_updates=ON

	
/etc/init.d/mysqld restart
mysql -p

mysql> show global variables like '%log%';  ##查看log_bin是否开启
mysql> show master logs;	#查看日志列表
mysql> show global variables like '%server%';

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'password';	#用户创建
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';	#授权
mysql> SHOW MASTER STATUS;

查看二进制日志是否开启
在这里插入图片描述查看主节点二进制日志列表
在这里插入图片描述查看主节点的server id
在这里插入图片描述在主节点上创建有复制权限的用户
在这里插入图片描述获取复制源的二进制日志坐标
在这里插入图片描述

3、编辑从节点配置文件

vim /etc/my.cnf
###启用二进制日志文件
	server-id=1
	log-bin=mysql-bin
	log_slave_updates=ON

	
/etc/init.d/mysqld restart
mysql -p
mysql> show global variables like '%server%';

查看主节点的server id
在这里插入图片描述在从节点配置访问主节点的参数信息

添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。

show master logs;	#获取二进制文件列表
CHANGE MASTER TO MASTER_HOST='172.25.73.1',MASTER_USER='repl',MASTER_PASSWORD='westos', MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1898;

在这里插入图片描述启动复制线程

START SLAVE;

在这里插入图片描述

查看从节点的状态信息

show slave status\G

在这里插入图片描述

4、测试:

主从复制同步之前必须保持两个数据库已经存在的数据相同,所以需要将server1的备份文件导入在server2的库中

mysqldump -p westos > dump.sql   #备份server1数据库
scp dump.sql server2:     #传输给server2
在server2中必须提前建立和server1一样的数据库westos
mysql -p westos < dump.sql    #备份导入server2数据库中
此时两个数据库已经完全一样

在主节点创建数据库,并查看主节点二进制日志信息
在这里插入图片描述

在从节点查找二进制日志信息,并查看mydb数据库是否复制成功

在这里插入图片描述

在这里插入图片描述

五、GTID复制

1、sver1配置(主节点)

vim /etc/my.cnf
\\\
[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON
\\\
/etc/init.d/mysqld restart 

2、server2配置(从节点)

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.73.1',MASTER_USER='repl',MASTER_PASSWORD='westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;

3、server3配置(从节点)

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.73.2',MASTER_USER='repl',MASTER_PASSWORD='westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;

六、Mysql半同步复制

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay-log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
在这里插入图片描述

对照官方文档

https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html

1、在server1上

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';  ##查看是否安装
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;  ##激活插件

在这里插入图片描述

在server1上查看
mysql> show status like '%rpl%'

| Rpl_semi_sync_master_status                | ON    |

看到 ON表示已开启

2、在server2上

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;  ##激活
重启IO线程使半同步生效
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;

在这里插入图片描述

在server2上查看

在这里插入图片描述

3、测试:

在server2上关闭slave模拟存在一个故障

stop slave;

在server1上给表插入数据
等待10s才成功,因为上面超时时间是10s,10s后如果没有收到slave节点的返回,就会切换到异步复制,再次插入时就不会延迟,因为已经是异步了
在这里插入图片描述

七、Mysql异步复制

MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
在这里插入图片描述

八、延迟复制

延迟复制就是将 Slaves 节点与 Master 节点保持指定时间的复制间隔。
所谓的延迟 ,只是对 SQL_Thread 的线程的延迟。IO_Thread 主库发生的任何操作的日志都会同步到 slave,也就是说 IO_Thread 线程和主库是没有延迟的。只是 SQL_Thread 与主库有延迟。只是执行时间延迟,而不是读取 binlog 时间延迟。

1、延时设置,在slave端进行设置

CHANGE MASTER TO MASTER_DELAY = N;

在这里插入图片描述

2、查看设定是否生效

show slave status\G		可查看设定的时间

在这里插入图片描述

3、测试

在master端插入数据,在slave端会延迟30秒将数据写入
在这里插入图片描述在slave端查看,会出现倒计时,30后结束
在这里插入图片描述30秒后,此时SQL_Thread 的线程执行,数据写入
在这里插入图片描述

九、并行复制

基于组的并发复制,可以支持在一个database中,并发执行relaylog中的事务。相同的二进制日志组在master上提交并行应用到slave节点上,没有跨数据库的限制,并且不需要把数据分割到多个数据库。

1、Slave端:

修改配置文件并重启mysql

vim /etc/my.cnf
添加以下参数
 slave-parallel-type=LOGICAL_CLOCK     #基于组提交的并行用户
 slave-parallel-workers=16             #开启16个worker:单线程变成多线程(前两个必须加入,后面为优化)
 master_info_repository=TABLE          #优化选项,默认以文件存储,记录master信息,用表来记录,更新速度更快   
 relay_log_info_repository=TABLE       #读日志信息,用表来记录(原来是记录在磁盘里)
 relay_log_recovery=ON                 #激活recovery:读取master二进制日志,如果损坏,直接丢弃然后重新读取
/etc/init.d/mysqld restart

2、查看slow_query_log是否开启

在这里插入图片描述

3、测试:

让slave端执行select sleep(10);休眠10秒,在日志中可查询到
在这里插入图片描述在这里插入图片描述

十、组从复制(多主模式)

组复制是一种技术,可用于实现 容错系统。 复制组是一组 每个服务器都有自己的完整数据副本(一个 无共享复制方案),并相互交互 通过消息传递。 通信层提供了一套 原子消息和全序消息等保证 送货。 这些是非常强大的属性,可以转化为 非常有用的抽象,可以用来构建更多 高级数据库复制解决方案
官网帮助文档

https://dev.mysql.com/doc/refman/5.7/en/group-replication.html

在这里插入图片描述

1、还原所有主从节点的设置

/etc/init.d/mysql stop	关闭
rm -fr /data/mysql/*	删除mysql数据 

vim /etc/my.cnf 中添加的参数全部删除
在这里插入图片描述

2、添加组复制的参数

[mysqld]
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

server_id=1		#根据主从节点写
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server1:33061"	#根据主从节点写
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="172.25.73.0/24,127.0.0.1/8"
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON


mysqld --initialize-insecure --user=mysql	初始化数据库,不使用密码

在这里插入图片描述mysql初始化完成
在这里插入图片描述

3、设置组

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';

mysql> SET GLOBAL group_replication_bootstrap_group=ON; #只在主节点输入,从节点不必输入,如果在其它从节执行此语句,那么该节点将会成为主节点,无法进行组合
mysql> START GROUP_REPLICATION;		#启动组
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

在这里插入图片描述

4、查看组服务是否启动

SHOW PLUGINS;

在这里插入图片描述一旦 START GROUP_REPLICATION语句返回,组已启动。 你可以检查 该组

mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述在其他从节点执行完 2 、 3 步骤后,可查询到组中的所以节点
在这里插入图片描述

5、测试

在任意节点进行建库,建表,数据插入,在其他两个节点都可查询到

mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'Luis');

在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿王不想秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值