LAMP架构——mysql的安装部署、mysql集群及主从结构(1)

一、安装包下载及解压

1.源码安装包下载

更新下载位置
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述boost库不带的话,编译时会出问题,这是c++的库,编译时会有依赖性
在这里插入图片描述

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

2.安装编译软件

安装cmake
mysql编译时需要使用cmake

在这里插入图片描述
安装gcc和gcc-c++
在这里插入图片描述安装时可以查看官方安装手册
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述编译
cmake是商业化的,与gmake相比会有编译的进度

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 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0   

[root@server5 mysql-5.7.31]# yum install bison -y

在这里插入图片描述mysql8直接使用InnoDB存储,把myisam引擎去掉了
Mysql存储引擎InnoDB
MyISAM与InnoDB 的区别
在这里插入图片描述在这里插入图片描述解决编译时出现的问题
在这里插入图片描述
重新编译

在这里插入图片描述

在这里插入图片描述
make
make -j4 表示用4个cpu去算,但不建议,因为是虚拟机,内存不够,如果开多个核心并行计算时,会造成内存溢出的问题。make中间会有一些红色的报错,只要不停下来就没有影响,编译时比较慢。
在这里插入图片描述安装
在这里插入图片描述
在这里插入图片描述

3.初始化mysql

在这里插入图片描述

创建mysql用户

[root@server5 mysql-5.7.31]# useradd  -s /sbin/nologin  -M -d /data/mysql mysql

在这里插入图片描述复制启动脚本、创建数据目录并赋权限


在这里插入图片描述修改配置文件


[root@server5 mysql-5.7.31]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0

在这里插入图片描述

在这里插入图片描述
mysql命令放到环境变量中

[root@server5 mysql-5.7.31]# cd /usr/local/mysql/
[root@server5 mysql]# cd bin/
[root@server5 bin]# pwd
/usr/local/mysql/bin
[root@server5 bin]# vim ~/.bash_profile 
[root@server5 bin]# source ~/.bash_profile

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

使用mysql用户属性初始化,并修改密码

[root@server5 bin]# mysqld --initialize --user=mysql  #初始化
[root@server5 bin]# /etc/init.d/mysqld start		#开启mysql
[root@server5 bin]# mysql_secure_installation 		#修改密码

在这里插入图片描述在这里插入图片描述
在这里插入图片描述测试
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/6e13bdf44d0f45a1bb08809af747f9cd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSa5LqO5bCR55在这里插入图片描述
在这里插入图片描述

二、串联Lamp架构,nginx+php+mysql

1.phpMyAdmin介绍及安装

  phpMyAdmin,它是用 PHP 脚本写的 MySQL 数据库的管理软件,是使用 Web 图形模式直接管理 MySQL 数据库的工具。phpMyAdmin 可以用来创建、修改、删除数据库和数据表;可以用来创建、修改、删除数据记录;可以用来导入和导出整个数据库;还可以完成许多其他的 MySQL 系统管理任务
linux phpmyadmin安装及配置过程
php的mysqlnd驱动

[root@westos_student73 file_recv]# scp phpMyAdmin-5.0.2-all-languages.zip server5:/usr/local/nginx/html
安装phpMyAdmin软件,图形管理界面
[root@server5 mysql]# cd /usr/local/nginx/html/
[root@server5 html]# unzip phpMyAdmin-5.0.2-all-languages.zip 

开启php-fpm服务
[root@server5 html]# ln -s phpMyAdmin-5.0.2-all-languages myadmin
[root@server5 myadmin]# systemctl start php-fpm.service
[root@server5 myadmin]# netstat -antlp
开启Nginx,并查看端口
[root@server5 myadmin]# nginx
[root@server5 myadmin]# netstat -antlp

修改配置文件,指定默认发布页面
[root@server5 myadmin]# cd /usr/local/nginx/
[root@server5 nginx]# cd conf/
[root@server5 conf]# vim nginx.conf
     location / {
            root   html;
            index  index.php index.html index.htm;
        }
    }
    
修改php.in配置文件
[root@server5 conf]# cd /usr/local/php/
[root@server5 php]# cd etc/
[root@server5 etc]# vim php.ini 
pdo_mysql.default_socket= /data/mysql/mysql.sock
mysqli.default_socket = /data/mysql/mysql.sock

[root@server5 etc]# systemctl reload php-fpm

下载压缩包
在这里插入图片描述解压压缩包
在这里插入图片描述创建软链接,并开启php-fpm服务

在这里插入图片描述开启nginx
在这里插入图片描述浏览器访问进行测试
index.php不是默认发布页面,所以需要指定到该页面
在这里插入图片描述
修改配置文件,指定默认发布页面
在这里插入图片描述在这里插入图片描述
修改php.in配置文件
在这里插入图片描述
在这里插入图片描述
mysqli.default_socket = /data/mysql/mysql.sock在这里插入图片描述

实验中出现的问题,实验时没有发现/data/mysql数据库的权限是750,导致虽然给php-fpm指定了sock文件,但是没有访问权限,也就无法连接数据库
解决方法: 将文件权限改为755即可



看到该界面表示整个Lamp架构部署成功,访问的是nginx,但是因为是php文件,所以交给php-fpm处理,动态语言代码中要连接数据库,访问数据库,然后取数据,返回nginx,最后再返回浏览器。
sa是system administrator的简写,即系统管理员的意思
在这里插入图片描述
在这里插入图片描述

2.数据库主从集群环境配置

注意初始化后,需要将数据库服务开启,才可以修改密码,否则会提示没有sock文件

1)架构背景

   mysql是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失。为了保证mysql数据库的可靠性。就要会一些提高可靠性的技术。

为什么要主从复制、读写分离?
   主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能你想,假设是单机,读写都在一台MySQL上面完成,性能肯定不高。如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能不就能大大提高了吗?

   所以主从复制、读写分离就是为了数据库能支持更大的并发

   随着业务量的扩展、如果是单机部署的MySQL,会导致I/O频率过高。采用主从复制、读写分离可以提高数据库的可用性。

主从复制的作用

   做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
   架构的扩展: 业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

   读写分离,使数据库能支持更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

   1.在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
   2.在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
   3.当主服务器出现问题时,可以切换到从服务器。(提升性能)

Mysql主从复制原理
Mysql的主从复制中主要有三个线程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一条binlog dump thread线程和Slave中的I/O thread 、SQL thread两条线程。

master(binlog dump thread主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的binlog文件中。并且,Master会创建log dump线程通知Slave主库中存在数据更新,这就是为什么主库的binlog日志一定要开启的原因。

I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。然后,将binlog保存在 中继日志(relay log) 中,中继日志也是记录数据更新的信息。

SQL线程也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步。

主从复制过程:
   当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。

   salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程。

   当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。

   I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。

   SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操
作。

在这里插入图片描述

主从复制的类型

主从复制的过程有不同的策略方式进行数据的同步,主要包含以下几种:

   1. 「同步策略」:Master会等待所有的Slave都回应后才会提交,这个主从的同步的性能会严重的影响。
   2.「半同步策略」:Master至少会等待一个Slave回应后提交。
   3.「异步策略」:Master不用等待Slave回应就可以提交。
   4.「延迟策略」:Slave要落后于Master指定的时间。

Master提交后,所有连接的客户端就可以访问到数据了,mysql数据库不是写入就立刻可以访问的

2)从数据库服务器搭建

需要两台装有mysql的主机sever5和server6
配置server6主机的mysql,不需要编译,直接复制文件过去就行,因为已经编译完成。

复制程序到server6
[root@server5 ~]# scp -r /usr/local/mysql/ server6:/usr/local/

复制配置文件到server6
[root@server5 etc]# scp my.cnf server6:/etc

复制启动脚本到server6
[root@server5 etc]# scp /etc/init.d/mysqld server6:/etc/init.d/

创建用户和目录,并修改权限
[root@server6 ~]# useradd -s /sbin/nologin -M -d /data/mysql mysql
[root@server6 ~]# id mysql
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)
[root@server6 ~]# mkdir -p /data/mysql
[root@server6 ~]# chown mysql.mysql /data/mysql/

添加mysql命令到环境变量
[root@server6 ~]# vim .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
[root@server6 ~]# source .bash_profile 

初始化数据库
[root@server6 ~]# mysqld --initialize --user=mysql
[root@server6 ~]# /etc/init.d/mysqld start
[root@server6 ~]# mysql_secure_installation 

配置server6的mysql
复制程序到server6
在这里插入图片描述复制配置文件到server6
在这里插入图片描述
复制启动脚本到server6
在这里插入图片描述创建用户和目录,并修改权限

在这里插入图片描述添加mysql命令到环境变量
在这里插入图片描述

在这里插入图片描述
初始化mysql
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述数据库登陆测试
在这里插入图片描述

三、异步主从复制

1.mysql主从集群搭建(主从复制,一主一从)

mysql的主从集群其实就是mysql主从复制,主从复制是mysql最成熟的技术了,包括后面的MGR集群(MySQL Group Replication)也是基于mysql的主从机制(复制技术)

在这里插入图片描述
mysql添加及删除用户操作参考

1)配置master节点server5

配置server1的mysql的server-id和二进制日志名字

[root@server5 etc]# vim /etc/my.cnf

log-bin=mysql-bin
#激活二进制日志记录
server-id=1
#设置主从时id必须不同,默认id都为0,0表示禁止所有的复制
[root@server5 etc]# /etc/init.d/mysqld restart
#这是使用脚本重启,cmake编译时加WITH_SYSTEMD:BOOL=OFF,就会生成systemd的管控文件

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
查看二进制日志文件
在这里插入图片描述mysql中创建用户repl,并进行授权

[root@server5 mysql]# mysql -p
Enter password:
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'westos';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> show master status;

编号表示复制从哪开始
在这里插入图片描述还可以有以下配置:
mysql> FLUSH TABLES WITH READ LOCK; #该指令表示锁表,
在这里插入图片描述

2)配置slave节点server6

slave配置server-id

[root@server6 ~]# vim /etc/my.cnf
[root@server6 ~]# /etc/init.d/mysqld restart
server-id=2

在这里插入图片描述

在这里插入图片描述
slave配置复制


[root@server6 ~]# /etc/init.d/mysqld restart
[root@server6 ~]# mysql -p
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.15', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=595;
mysql> start slave;
mysql> show slave status\G;

slave端复制是需要认证,需要之前在主库创建的用户
在这里插入图片描述

3)测试

master端添加数据进行测试
创建数据库,添加表,表中含有的字段,字段类型 varchar(20) 可变长字符20个字符,not null 表示不为空

[root@server5 mysql]# mysql -p
Enter password: 

mysql> create database westos;
mysql> use westos;
mysql> > create table users (
    -> username varchar(20) not null,
    -> password varchar(25) not null);
mysql> show tables;
mysql> desc users;
mysql> insert into users values ('user1','123');
mysql> insert into users values ('user2','456');
mysql> select * from users;

在这里插入图片描述
在这里插入图片描述
slave端查看
在这里插入图片描述

2.mysql一主多从架构(线性)

一主一从架构
slave端的I/O线程负责将master端发来的二进制日志记录保存到自己节点的数据目录中,保存为中继日志,并持久化到磁盘,比如server2-relay-bin.000002。
在这里插入图片描述mysql主从复制基础数据不同,slave端的SQL线程会报错,这是因为mysql的主从复制并不是将数据直接同步过去,而是将数据文件中的内容复制过来,也就是Master端做啥,slave端做啥,但这样做的前提条件是base数据相同。
一主多从架构
一主多从的架构适合读多写少的场景,有两中模式,第一种:A—>B&A---->C;第二种:A---->B----->C,该模式下,A节点的压力会小一些。
在这里插入图片描述

IO线程主要是把发过来的二进制日志保存到到自己的数据目录下
在这里插入图片描述在这里插入图片描述

1)扩展一个server7节点作slave

复制应用、配置文件和启动脚本

[root@server5 ~]# scp -r /usr/local/mysql/ server7:/usr/local/
[root@server6 mysql]# scp /etc/my.cnf server7:/etc
[root@server6 mysql]# scp /etc/init.d/mysqld server7:/etc/init.d/

在这里插入图片描述
在这里插入图片描述
创建mysql用户,创建数据库目录并赋权限,将mysql命令添加到环境变量,修改server-id,启动mysql

[root@server7 ~]# useradd -s /sbin/nologin -M -d /data/mysql mysql
[root@server7 ~]# chown mysql.mysql /data/mysql/
[root@server7 ~]# vim .bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
[root@server7 ~]# source .bash_profil

[root@server7 ~]# vim /etc/my.cnf
server-id=3
[root@server7 ~]# cat /etc/my.cnf
[root@server7 ~]# mysqld --initialize --user=mysql
[root@server7 ~]# /etc/init.d/mysqld start

在这里插入图片描述
初始化修改密码

[root@server7 ~]# mysql_secure_installation

在这里插入图片描述

2)创建一主多从架构:A—>B---->C

server5作为主服务器A,server6作为slave服务器B(该节点也需要有二进制日志,需要启用二进制日志),server7作为从服务器C
server6开启二进制日志,因为server7复制时是复制的二进制日志不是中继日志
回放的日志也要更新到二进制日志
在这里插入图片描述在这里插入图片描述

测试,server5添加数据,看server6会将回放日志写入二进制日志
在这里插入图片描述

[root@server2 mysql]# mysqlbinlog mysql-bin.000001 -v #查看二进制日志详细信息

在这里插入图片描述
在这里插入图片描述中继日志索引文件,记录所有的中继日志

在这里插入图片描述
使用mysqldump备份server5的westos数据库信息,并拷贝到server7
备份数据库信息时需要锁表,因为当数据信息较大时,备份不会瞬间完成,备份时可能有人正在写入信息,那备份出来的的数据库和当前信息可能不一致,锁表就是可以读不能写。
在这里插入图片描述
用mysqldump的数据有一个坑
在这里插入图片描述server7上创建数据库wesstos,并导入server5上备份的数据

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

server6创建repl用户,并赋权限replication slave
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述server7数据库指定复制主机和文件位置以及编号
在这里插入图片描述
测试
server5主服务器数据库插入数据
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

多于少的区别

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

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

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

打赏作者

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

抵扣说明:

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

余额充值