企业运维实战 LAMP架构 第四篇 (mysql源码编译、mysql主从复制、Gtid实现mysql主从复制、修改mysql主从复制模式)

源码编译安装

可以在mysql官网下载源码包

解压源码包

tar zxf mysql-boost-5.7.31.tar.gz

下载gcc和gcc-c++和cmake

yum install gcc gcc-c++ cmake -y

配置

cmake \ 
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \		#安装根目录
-DMYSQL_DATADIR=/data/mysql \					#数据存储目录
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \		#UNIX socket文件
-DWITH_INNOBASE_STORAGE_ENGINE=1 \				#启用InnoDB存储引擎
-DSYSCONFDIR=/etc \								#配置文件(my.cnf)目录
-DENABLED_LOCAL_INFILE=1 \						#启用加载本地数据
-DWITH_EXTRA_CHARSETS=all \						#扩展字符支持
-DDEFAULT_CHARSET=utf8mb4 \						#默认字符集
-DDEFAULT_COLLATION=utf8mb4_general_ci \		#默认字符校对
-DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0 #安装boost

Mysql5.7版本更新后有很多变化,比如json等,连安装都有变化,他安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost

编译

make

安装

make install

拷贝文件

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

vim /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock

将mysql的命令加入到系统全局变量

vim ~/.bash_profile
source ~/.bash_profile

在这里插入图片描述
创建一个mysql用户

useradd -M -d /data/mysql -s /sbin/nologin mysql

创建mysql数据存储目录,并且修改所属人和所属组

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

初始化数据库,不生成随即密码,初始化完成后会在数据库存储目录生成文件

mysqld --initialize-insecure --user=mysql

进入数据库存储目录

cd /data/mysql

也可以在初始化的时候生成一个随机密码,如果初始化过了,需要将数据库存储目录清空后再进行初始化

mysqld --initialize --user=mysql

此时可以看到随机密码:C3q#qUp.64FD
在这里插入图片描述
启动mysql

/etc/init.d/mysqld start

可以看到报错
在这里插入图片描述
修改mysql的配置文件

vim /etc/my.cnf

在这里插入图片描述
再次启动
在这里插入图片描述
此时进行数据库安全初始化

mysql_secure_installation

输入刚刚生成的随机密码,如果没有生成,直接空格即可,再设置新的密码
在这里插入图片描述
用新密码进入到mysql,看一下有哪些数据库

mysql -pwestos
show databases;

在这里插入图片描述

安装数据库的图形化程序phpMyAdmin

解压phpMyAdmin的zip包

unzip phpMyAdmin-5.0.2-all-languages.zip

讲解压后的文件拷贝到nginx默认发布目录中,并创建软连接,方便访问

cp -r phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html/
ln -s /usr/local/nginx/html/phpMyAdmin-5.0.2-all-languages/ /usr/local/nginx/html/phpMyAdmin

进入到nginx的配置文件目录

/usr/local/nginx/conf

修改配置文件

vim nginx.conf

修改加入默认index.php
在这里插入图片描述打开php模块
在这里插入图片描述
浏览器进入phpMyAdmin

172.25.21.1/phpMyAdmin

在这里插入图片描述使用root和设置的密码登陆,报错,这个错误的原因是找不到socket文件

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

vim	php.ini  #主配置文件在php安装目录下的etc下

在这里插入图片描述
在这里插入图片描述平滑更新一下php

systemctl reload php-fpm.service

此时再次登陆phpMyAdmin

用图形化界面创造一个808bass数据库,user_tb表,添加一些数据
在这里插入图片描述
进入到mysql,并查看是否创建成功

mysql -pwestos

	mysql> show databases;	#查看库
	mysql> use 808bass		#进入库
	mysql> show tables;		#查看表
	mysql> select * from user_tb;		#查看表内存储的信息

mysql 主从复制

首先为了快速实验,我们将server1作为master server2作为slave

为了方便快速 我们可以从server1拷贝mysql安装目录、配置文件和启动文件到server2

scp -r /usr/local/mysql  server2:/usr/local/mysql
scp /etc/my.cnf server2:/etc/
scp /etc/init.d/mysqld server2:/etc/init.d/

把mysql命令加入全局环境变量

vim ~/.bash_profile
source ~/.bash_profile

在这里插入图片描述
创建用户,创建数据库存储目录,修改所属人和组

useradd -M -d /data/mysql -s /sbin/nologin mysql
mkdir -p /data/mysql ;chown mysql.mysql /data/mysql

数据库初始化

mysqld --initialize-insecure --user=mysql

启动数据库

/etc/init.d/mysqld start

数据库安全初始化

mysql_secure_installation

此时在server1 也就是master端

vim /etc/my.cnf

log-bin=mysql-bin  #打开二进制日志
server-id=1	#设置一个server-id 不然默认是0 会导致冲突或者不知道来自哪个主机

修改配置文件需要重启mysql

/etc/init.d/mysqld restart

此时进入到mysql

[root@server1 ~]# mysql  -pwestos
				mysql> show master status;

可以看到master的状态 文件和Pos
在这里插入图片描述
创建一个用户,给他slave的权限,并且是可以通过网络连接进来的

grant replication slave on *.* to repl@'%' identified by 'westos';

此时在slave上测试,是否能连接

[root@server2 mysql]# mysql -pwestos -h 172.25.21.1 -urepl
					mysql> show databases;

可以看到库,说明成功
在这里插入图片描述
此时修改salve(也就是server2)的mysql配置文件

vim /etc/my.cnf

只需要增加一个server-id=2
在这里插入图片描述
重启mysql

/etc/init.d/mysqld restart

此时需要将之前在master的mysql写入的数据先导入到slave的mysql

在server1:

[root@server1 ~]# mysqldump -pwestos 808bass >dump.sql  #备份
[root@server1 ~]# scp dump.sql server2:  #将文件传到slave

在server2:

[root@server2 ~]# mysqladmin -pwestos create 808bass
[root@server2 ~]# mysql -pwestos 808bass <dump.sql
[root@server2 ~]# mysql -p westos
				mysql> select * from 808bass.user_tb;

如果可以看到数据,那么就是导入成功

此时修改salve选择的master端

先看一下master的File名字和Pos
在这里插入图片描述
此时在server2:

需要写对master的ip、用户名、密码、二进制日志的名字和pos

mysql -pwestos
mysql> change master to master_host='172.25.21.1', master_user='repl', master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=437;
mysql> start salve;	#打开slave
mysql> show slave status\G;	#查看salve状态

如果看到两个yes,那就是设置成功
在这里插入图片描述

测试查看:

通过图形化或者命令模式增加一些数据

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

查看808bass库的user_tb表有没有数据同步过来

mysql -pwestos
	select * from 808bass.user_tb;

如果同步过来,代表成功!

Gtid实现主从复制

我们此时要做的是:

server1作为server2的master server2是server1的slave

server2作为server3的master server3是server2的slave

server1:

修改mysql的配置文件

vim /etc/my.cnf

开启log-slave-updates和gid_mode功能
启用enforce_gtid_consistency功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行
在这里插入图片描述
重启mysql

/etc/init.d/mysqld restart

进入mysql

mysql -pwestos
	show master status;

此时file已经变成了新的文件
在这里插入图片描述

server2:
修改mysql的配置文件

vim /etc/my.cnf

跟1设置一样,就是server-id不能一致
在这里插入图片描述
重启mysql

/etc/init.d/mysqld restart

进入mysql
由于我们使用gtid,我们不需要指定日志文件和pos,MASTER_AUTO_POSITION = 1直接启用基于GTID的复制

mysql -pwestos
	stop slave;  #先关闭slave
	change master to master_host='172.25.21.1', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1; #修改master
	start slave;
	show slave status\G;

此时查看状态,显示成功
在这里插入图片描述

server3:
此时重复上面的操作,快速在server3上安装mysql

scp -r /usr/local/mysql  server3:/usr/local/mysql
scp /etc/my.cnf server3:/etc/
scp /etc/init.d/mysqld server3:/etc/init.d/

把mysql命令加入全局环境变量

vim ~/.bash_profile

在这里插入图片描述

source ~/.bash_profile


useradd -M -d /data/mysql -s /sbin/nologin mysql
mkdir -p /data/mysql ;chown mysql.mysql /data/mysql

mysqld --initialize-insecure --user=mysql

/etc/init.d/mysqld start

mysql_secure_installation

修改server3的mysql的配置文件 注意需要将server-id修改成3
在这里插入图片描述
重启

/etc/init.d/mysqld restart

此时回到server2:

创建一个server3在同步server2的mysql时候的用户

grant replication slave on *.* to repl@'%' identified by 'westos';

备份一下mysql的数据,我们做主从用了gtid时,用mysqldump备份时就要加–set-gtid-purged=OFF,否则你在主上导入恢复了数据,主没有了binlog日志,同步则不会被同步

mysqldump -pwestos 808bass --set-gtid-purged=OFF  >dump.sql
scp dump.sql server3:

回到server3

[root@server3 ~]# mysqladmin -pwestos create 808bass
[root@server3 ~]# mysql -pwestos 808bass <dump.sql
						 select * from 808bass.user_tb;  #查看是否备份成功

此时进入数据,修改master 指向ip 172.25.21.2

change master to master_host='172.25.21.2', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1;

开启slave以及查看状态

start slave;
show slave status\G;

在这里插入图片描述

此时在server1的mysql插入数据
在这里插入图片描述
server2查看数据是否同步
在这里插入图片描述
server3查看数据是否同步
在这里插入图片描述

mysql的主从复制主要有3种模式

mysql默认是主从异步复制

性能消耗低,但是容易出现主从数据唯一性问题

mysql主从同步复制

数据完整性好,但是性能消耗高

mysql主从半自动复制

介于上面两种之间。既能很好的保持完整性,又能提高性能

首先在master端打开

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

在slave端打开

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看master插件状态

show status like 'rpl%';

可以看到是关闭的
在这里插入图片描述
启动插件

SET GLOBAL rpl_semi_sync_master_enabled =1;

再次查看

show status like 'rpl%';

此时已经打开
在这里插入图片描述

查看slave端插件状态

show status like 'rpl%';

打开插件

SET GLOBAL rpl_semi_sync_slave_enabled  =1;

再次查看

show status like 'rpl%';

发现还是关闭的
在这里插入图片描述
我们需要重新打开salve的io线程的thread

stop slave io_thread;
start slave io_thread;

此时再次查看,已开启
在这里插入图片描述

测试:
在server1:

插入数据,并且可以看到有一个yes返回,没有no返回
在这里插入图片描述

此时数据已经复制完成
在这里插入图片描述
关闭slave的io_thread线程
在这里插入图片描述
再次插入数据,由于设置的超时时间为10s,等待十秒后,no返回1,yes不返回,然后切回主从异步复制
在这里插入图片描述
此时再次打开io_thread,查看数据库内容,可以看到自动去匹配tgid然后复制缺少的数据
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL主从复制GTID(Global Transaction Identifier)是一种用于标识和跟踪事务的机制。GTID是一个全局唯一的标识符,用于确保主从复制中每个事务的唯一性和一致性。它在MySQL 5.6版本中引入,并在之后的版本中得到改进和增强。 使用GTID进行主从复制可以简化配置和管理,并提供更可靠的数据同步。下面是使用GTID进行主从复制的基本步骤: 1. 在主服务器上启用GTID功能: 在主服务器的配置文件(my.cnf)中添加以下参数: ``` [mysqld] server-id=1 log-bin enforce-gtid-consistency=true ``` 启用GTID功能并设置服务器ID和二进制日志。 2. 在从服务器上启用GTID功能: 在从服务器的配置文件中添加以下参数: ``` [mysqld] server-id=2 enforce-gtid-consistency=true ``` 设置服务器ID和启用GTID功能。 3. 配置主从关系: 在主服务器上创建一个用于复制的用户,并授予适当的权限。 4. 在从服务器上配置主服务器信息: 在从服务器上执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='复制用户', MASTER_PASSWORD='复制用户密码', MASTER_AUTO_POSITION=1; ``` 这将配置从服务器以使用GTID复制并将其连接到主服务器。 5. 启动主从复制: 在从服务器上执行以下命令开始复制: ``` START SLAVE; ``` 从服务器将开始从主服务器接收和应用事务。 通过以上步骤,你可以使用GTID实现MySQL主从复制。这种方式可以提供更高的数据一致性和可靠性,并简化了配置和管理过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Pu.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值