LAMP架构7-搭建数据库mysql以及数据库的主从复制(GTID,半同步)

本文详细介绍了在RHEL7.6环境下编译安装MySQL 5.7的步骤,包括环境准备、配置、启动数据库等。接着,讲解了基于二进制日志和GTID的主从复制配置,以及半同步复制的设置方法,确保数据的安全性和一致性。同时,还提供了可视化数据库管理工具phpMyAdmin的部署和登陆问题解决。
摘要由CSDN通过智能技术生成


前言

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
mysql官网

1、安装mysql5.7

1.1 安装前环境准备

环境:rhel7.6 gcc(安装mysql8需要5.3版本以上) cmake升级(3.5版本以上)

cmake升级下载地址

[root@server1 ~]# yum install gcc gcc-c++  -y   #安装之前确保c与c++编译都有,不然configure报错
[root@server1 ~]# tar zxf cmake-3.20.2.tar.gz
[root@server1 ~]# cd cmake-3.20.2
[root@server1 ~]# ./configure
[root@server1 ~]# make
[root@server1 ~]# make install
[root@server1 cmake-3.20.2]# which cmake 
/usr/local/bin/cmake

1.2 编译mysql-5.7.31

到mysql官网下载对应版本

mysql5.7安装:
[root@server1]# tar zxf mysql-boost-5.7.31.tar.gz
[root@server1]# cd mysql-5.7.31
[root@server1 mysql-5.7.31]# mkdir build   
##新建build目录的目的是将所有的构建信息放在这个目录里,cmake完了可以删掉
[root@server1 mysql-5.7.31]# cd build
[root@server1 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-5.7.31/boost/boost_1_59_0
[root@server1 build]# make -j2               #使用双核cpu编译,速度更快,内存至少4G
[root@server1 build]# make install

1.3 配置数据库相关

1.3.1 拷贝脚本文件

[root@server1 support-files]# pwd
/usr/local/mysql/support-files
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld

在这里插入图片描述

1.3.2 新建用户(用于访问数据库)

# useradd -M -d /usr/local/mysql/ -s /sbin/nologin mysql
# tail -n 1 /etc/passwd
mysql:x:1001:1001::/usr/local/mysql/:/sbin/nologin

在这里插入图片描述

1.3.3 创建数据库目录

# mkdir -p /data/mysql
# chown mysql.mysql /data/mysql

在这里插入图片描述

1.3.4 添加变量

[root@server1 support-files]# cd
[root@server1 ~]# vim .bash_profile 
[root@server1 ~]# source  .bash_profile 

在这里插入图片描述

1.3.5 修改配置(/etc/my.cnf)

[root@server1 ~]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/data/mysql/mysql.sock

这里的mysql日志全部写默认目录,无法重定义其他目录
在这里插入图片描述

1.3.6 初始化数据库(得到首次登陆密码)

[root@server1 ~]# mysqld --initialize --user=mysql

在这里插入图片描述

1.4 启动数据库

[root@server1 my.cnf.d]# /etc/init.d/mysqld  start
Starting MySQL.Logging to '/data/mysql/server1.err'.
 SUCCESS! 

在这里插入图片描述
初次进入数据库设置数据库密码
在这里插入图片描述

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

1.5 可视化数据库管理插件

下载插件到server1上,phpMyAdmin是一款php语言开发的可视化数据库管理界面。

在这里插入图片描述
解压,移动到nginx发布目录

[root@server1 ~]# unzip phpMyAdmin-5.0.2-all-languages.zip   # 解压
[root@server1 ~]# mv phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html/phpadmin # 放到nginx发布目录
[root@server1 ~]# nginx  # 如果nginx服务未开启,打开它

在这里插入图片描述
浏览器访问172.25.200.1/phpadmin
在这里插入图片描述
登陆错误问题解决

[root@server1 etc]# pwd
/usr/local/lnmp/php/etc
[root@server1 etc]# vim php.ini 
[root@server1 etc]# systemctl reload php-fpm.service 

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

在这里插入图片描述
登陆成功,可以在此界面管理数据库
在这里插入图片描述

2、mysql主从复制—基于二进制日志复制

2.1 按照server1的步骤,在server2上安装启动数据库

由于环境一样,直接将server1上编译好的mysql5.7拷贝到server2上
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2 主从复制配置

2.2.1 master设置

复制拓扑中的每个服务器都必须配置有唯一的服务器ID,您可以使用server_id系统变量指定该ID 。此服务器ID用于标识复制拓扑中的各个服务器,并且必须是1到(2的32次幂)-1之间的正整数。您可以server_id通过发出如下语句来动态更改值:

SET GLOBAL server_id = 1;	      	//在线生效,mysql8默认id为1

默认服务器ID为0时,master和slave互不连接,因此该值不能在复制拓扑中使用。除此之外,您还可以选择组织和选择服务器ID的方式,只要每个服务器ID与复制拓扑中任何其他服务器使用的每个其他服务器ID不同即可。请注意,如果先前为服务器ID设置的值为0,则必须重新启动服务器以使用新的非零服务器ID初始化源。否则,不需要重新启动服务器,除非您需要启用二进制日志记录或进行其他需要重新启动的配置更改。

必须在master上启用二进制日志记录,因为二进制日志是将更改从master复制到其slave的基础。如果使用该log-bin 选项未在master上启用二进制日志记录,则无法进行复制。要在尚未启用二进制日志记录的服务器上启用二进制日志记录,必须重新启动服务器。在这种情况下,请关闭MySQL服务器并编辑 my.cnf或my.ini文件。在[mysqld]配置文件的部分中,添加log-bin和 server-id选项。如果这些选项已经存在,但已被注释掉,请取消注释这些选项并根据需要进行更改。例如,要使用日志文件名前缀启用二进制日志记录mysql-bin并将服务器ID配置为1,请使用以下几行:

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

master创建复制用户:
每个slave使用MySQL用户名和密码连接到master,因此master上必须有一个用户,让slave用于连接。设置slave时,用户名由命令MASTER_USER上的选项指定 CHANGE MASTER TO。只要已被授予REPLICATION SLAVE 特权,任何帐户都可以用于此操作。您可以选择为每个slave创建一个不同的帐户,或为每个slave使用相同的帐户连接到master。

要创建一个新帐户,请使用CREATE USER。要向该帐户授予复制所需的特权,请使用以下GRANT 语句。如果仅出于复制目的创建帐户,则该帐户仅需要 REPLICATION SLAVE特权。例如,要设置一个新用户,repl该用户可以从example.com域内的任何主机进行复制连接,请在master上使用以下命令:

CREATE USER 'repl'@'172.25.200.%' IDENTIFIED BY 'westos';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.25.200.%';

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

在这里插入图片描述
回去查一下加不加单引号区别!?
在这里插入图片描述

在这里插入图片描述

2.3 slave设置

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

在这里插入图片描述

2.4 测试

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

3、mysql主从复制—基于GTID复制

3.1 master配置

[root@server1 ~]# vim /etc/my.cnf
  gtid_mode=ON
  enforce-gtid-consistency=ON
[root@server1 ~]# /etc/init.d/mysqld restart

在这里插入图片描述

3.2 slave配置

[root@server2 ~]# vim /etc/my.cnf
  gtid_mode=ON
  enforce-gtid-consistency=ON
[root@server2 ~]# /etc/init.d/mysqld restart

[root@server2 ~]# mysql -pwestos
mysql> stop slave;

mysql> change master to 
       master_host='172.25.200.1',
       master_user='repl',
       master_password='westos',
       master_auto_position=1;
       
mysql> show slave status\G;
            ...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

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

在这里插入图片描述

3.3 测试

在server2上
mysql> select * from gtid_executed; 
Empty set (0.00 sec)    ## 空是因为数据库还未变动

在server1库里添加内容
mysql> INSERT INTO mysql-test.test values ('222','33');
Query OK, 1 row affected (0.04 sec)
mysql> select * from test;
+------+-----+
| name | age |
+------+-----+
| 111  | 25  |
| 222  | 33  |
+------+-----+

此时回到server2上已经看到gtid表中有同步数据
mysql> select * from gtid_executed;
+--------------------------------------+----------------+--------------+
| source_uuid                          | interval_start | interval_end |
+--------------------------------------+----------------+--------------+
| 5b488e4b-afdb-11eb-a7f9-525400512725 |              1 |            1 |
+--------------------------------------+----------------+--------------+
1 row in set (0.00 sec)

4、mysql主从复制—半同步复制(基于GTID)

数据库的主从复制依赖网络同步,slave总是滞后于master,如果存在网络环境糟糕,延时过大,如存在几个小时的延时数据,这样会大大增加数据丢失风险,在一些特殊场合数据要比节约同步时间更重要,如银行,重要数据中心等,因此必须保证数据的安全性,半同步复制的意思是当数据已经到达slave端进行备份,才会给master返回确认信息,这时候,数据才被真正的写入数据库。

4.1 设置master与slave

半同步复制:
	master:
	INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
	SET GLOBAL rpl_semi_sync_master_enabled =1;
	SHOW STATUS LIKE 'Rpl_semi%';
	
	
	slave:
	INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
	SET GLOBAL rpl_semi_sync_slave_enabled = 1;
	STOP SLAVE IO_THREAD;
	START SLAVE IO_THREAD;

查看状态(master)
 mysql> show variables like 'rpl%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
| rpl_stop_slave_timeout                    | 31536000   |
+-------------------------------------------+------------+

mysql> SHOW STATUS LIKE 'Rpl%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 1     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 1127  |
| Rpl_semi_sync_master_tx_wait_time          | 1127  |
| Rpl_semi_sync_master_tx_waits              | 1     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 1     |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)


查看状态(slave)
mysql> show status like 'Rpl_semi%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+

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

4.2 测试

master端
在这里插入图片描述
slave端
在这里插入图片描述

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

本篇文章到此结束,下一篇文章写数据库主从复制的组合方式

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值