Linux安装mysql数据库并实现主从搭建

一.环境说明

【环境说明】:

192.168.110.161 mysql-master ##网络配置到位,防火墙关闭,selinux关闭

192.168.110.162 mysql-slave ##网络配置到位,防火墙关闭,selinux关闭

两台主机,操作系统是centos7,提前网络配置好,关闭防火墙,selinux,修改主机名

二.【YUM配置】

本次建议使用操作系统镜像做yum源,具体方法如下

1.创建操作系统ISO镜像的挂载目录,并挂载

mkdir /mnt/yllyum

mount /dev/cdrom /mnt/zijian-yum

2.进入yum的目前做备份,并创建自建的yum源的文件

cd /etc/yum.repos.d/

mkdir bak

mv * bak

#自建yum的文件

cat >zijian-yum.repo <<EOF

[base]

name=CentOS-$releasever - Base

baseurl=file:///mnt/zijian-yum

enable=1

gpgcheck=0

gpgkey=file:///mnt/zijian-yum/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

EOF

yum clean all

yum makecache

三.【mysql安装】

1.清理老的mysql

(1)卸载已有的mysql

查找以前是否装有mysql命令:rpm -qa|grep -i mysql

停止mysql服务,卸载之前安装的mysql: rpm -ev 包名

如果卸载过程中报依赖错误,直接在卸载命名后面加参数 --nodeps

rpm -ev 包名 --nodeps

(2)查找之前老版本mysql的文件并删除老版本mysql的文件

2.安装前的准备

安装mysql之前需要确保系统中有libaio依赖

yum search libaio

yum install libaio -

3.下载mysql软件包

mkdir /u01/
cd /u01/
mkdir soft
cd soft

下载并上传文件mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz到soft目录下

5.解压软件包

#解压
tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
#重命名文件夹
mv mysql-8.0.33-linux-glibc2.12-x86_64 ../mysql8 

3)、安装

(1)添加用户和组

#添加用户组
groupadd mysql
#添加用户mysql 到用户组mysql(使用-r参数表示mysql用户是一个系统用户,不能登录) --已有,不操作
useradd -r -g mysql mysql

#添加完用下面命令测试,能看到mysql用户的信息
id mysql

(2)手动创建MySQL data目录

cd /u01/mysql8
mkdir data
mkdir log
mkdir run
touch /u01/mysql8/log/mysql8.log

(3)目录权限设置

#将mysql及其下所有的目录所有者和组均设为mysql
chown -R mysql:mysql /u01/mysql8/

#查看是否设置成功,执行下面命令,可以看到文件的所有者和组都变成了mysql
cd /u01/mysql8
ll

(4)配置my.cnf文件----此文件非常重要,初始化之前要把此文件放到 /etc 目录下,或者把老文件备份一下(升级失败还能用老MySQL)

##rm -rf /etc/my.cnf编辑新文件

vi /etc/my.cnf

#此文件内容如下(路径根据自己的实际情况):

[client]
port = 13306
socket = /tmp/mysql.sock

[mysqld_safe]
log-error=/u01/mysql8/log/mysql8.log
pid-file=/u01/mysql8/run/mysql8.pid

[mysqld]
port = 13306
init-connect='SET NAMES utf8mb4'     #连接时执行的SQL
basedir=/u01/mysql8           #根据自己的安装目录填写
datadir=/u01/mysql8/data       #根据自己的mysql数据目录填写
socket=/tmp/mysql.sock                
max_connections=200                   #允许最大连接数
max_connect_errors = 30               #最大连接错误次数
character-set-server=utf8mb4         #服务端使用的字符集默认为8比特编码的latin1字符集
default-storage-engine=INNODB         #创建新表时将使用的默认存储引擎
skip-character-set-client-handshake   #忽略应用程序想要设置的其他字符集
###sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #sql模式
 
net_read_timeout = 120               #在中止读取之前等待来自连接的更多数据的秒数
net_write_timeout = 900               #在中止写入之前等待块写入连接的秒数
max_allowed_packet = 500M             #在一次传送数据包的过程当中最大允许的数据包大小
wait_timeout=1800                     #请求的最大连接时间
interactive_timeout=1800             #和上一参数同时修改才会生效
 
###记录慢SQL
slow_query_log=1
long_query_time = 10
slow_query_log_file=slow-query.log

(5)初始化mysql数据库

/u01/mysql8/bin/mysqld --initialize-insecure --user=mysql --basedir=/u01/mysql8 --datadir=/u01/mysql8/data

#注意:mysqld --initialize-insecure初始化后的mysql是没有密码的

(6)mysqld_safe启动mysql(临时启动)

/u01/mysql8/bin/mysqld_safe --user=mysql &

(7)修改密码,调整用户

#登录数据库,无密码

cd /u01/mysql8/bin/
./mysql -u root -p # 默认没有密码,直接敲回车就可以

[注]:没有可以不管

--报错

[root@ol8_mysql8_master bin]# ./mysql -u root -p

./mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

--解决

ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

#修改数据库登录密码

#设置外网可以访问
在mysql的bin目录下执行:mysql -uroot -p密码 登陆到数据:
执行:use mysql;
执行:select host,user from user;

可以看到user为root,host为localhost的话,说明mysql只允许本机连接,那么外网,本地软件客户端就无法连接了。

调整方法:
执行:update user set host='%' where user ='root';
执行刷新:flush privileges;

use mysql;
ALTER USER 'root'@'%' IDENTIFIED BY 'Htjs_JS_2023';
flush privileges;

exit;

(8)测试登录

cd /u01/mysql8/bin/
./mysql -u root -p

输入密码后,应该就连接上了

show databases;
exit; #退出

(9)copy启动脚本并将其添加到服务且设置为开机启动,之前已经有的统统备份,统统移走

#mysql启动脚本为:/u01/mysql8/support-files/mysql.server

cp /u01/mysql8/support-files/mysql.server /etc/init.d/mysqld

#添加服务并设置开机启动

#添加系统服务
chkconfig --del mysqld
chkconfig --add mysqld

# 显示服务列表
chkconfig --list

# 开机启动
chkconfig --level 345 mysqld on

测试添加的服务是否能用

因为之前已经通过mysqld_safe启动mysql,因此需要先停掉进程,需要删除守护进程

ps -ef|grep mysqld 
kill -9 进程号

启动数据库服务

 [Linux6]
service mysqld status #查看状态
service mysqld start #启动mysql服务
service mysqld stop #停止mysql服务
[Linux7]
systemctl status mysqld #查看状态
systemctl start mysqld #启动mysql服务
systemctl stop mysqld #停止mysql服务

如果还访问不了,那可能是防火墙问题,修改下防火墙就ok。

4、配置mysql客户端命令快捷方式

先删除老的

rm -rf /bin/mysql
rm -rf /bin/mysqldump

--再增加新的快捷方式

cp /u01/mysql8/bin/mysql /bin/mysql
cp /u01/mysql8/bin/mysqldump /bin/mysqldump

测试登录

cd /

mysql -u root -p

输入密码后,应该就连接上了

show databases;

exit; #退出

[可能出现的问题]:libcrypto.so.1.1: cannot open shared object file。

[root@sc_12366_dzswj_l /]# mysql -u root -p

mysql: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

[解决1]:可以将OpenSSL进行升级,也可以用偷取取巧方法解决,还可以用直接复制所需要的lib文件解决,附上升级OpenSSL的方法

1.zlib

tar -zxvf zlib-1.2.13.tar.gz

cd zlib-1.2.13

./configure

make && make install

2.openssl

tar -zxvf openssl-1.1.1q.tar.gz

cd openssl-1.1.1q

./config

若报错Can't locate IPC/Cmd.pm in @IPC/Cmd

yum install perl-IPC-Cmd

若报错Operating system: x86_64-whatever-linux2

You need Perl 5.

yum install perl -y

make && make install

不用专门加参数,默认在/usr/local/ssl

cp libcrypto.so.1.1 /usr/local/lib

cp libssl.so.1.1 /usr/local/lib

cd /usr/local/lib

ln -sf libcrypto.so.1.1 libcrypto.so.0

ln -sf libcrypto.so.1.1 libcrypto.so

ln -sf libssl.so.1.1 libssl.so.0

ln -sf libssl.so.1.1 libssl.so

ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1

ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

验证

openssl version

[解决2]:

先删除老的

rm -rf /bin/mysql

rm -rf /bin/mysqldump

--或者投机取巧用软连接

ln -s /u01/mysql8/bin/mysql /bin/mysql

ln -s /u01/mysql8/bin/mysqldump /bin/mysqldump

测试登录

[测试登录]
cd /
mysql -u root -p

输入密码后,应该就连接上了

show databases;
exit; #退出

【主从环境准备】

1、mysql-master端关机,VMware克隆mysql-master端为mysql-slave端,并且启动mysql-slave端

2、mysql-slave端修改IP

3、mysql-slave端修改《auto.cnf》,修改为与主库不一致就行了

/u01/mysql8/data/auto.cnf

4、启动从节点,启动主节点

【主从搭建】:

1.配置mysql-master端

1)、追加my.cnf配置

server-id = 11
log-bin = mysql-bin                   #打开二进制功能,MASTER主服务器必须打开此项
expire_logs_days=15                   #日志过期时间
max_binlog_size=1024M                 #binlog单文件最大值
binlog-rows-query-log_events=1        #可以在binlog日志中看到语句的原始sql
?
binlog-format=ROW
###binlog-row-p_w_picpath=minimal     #允许应用程序只能对行的镜像数据进行复制,而不在关心行是否已经进行了DML操作
?
###gtid模式关键参数
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=true #从库做为其他从库的主库时用

master-info-repository=TABLE
relay-log-info-repository=TABLE

2)、重启MySQL服务

systemctl restart mysqld

2.配置mysql-slave端

1)、追加my.cnf配置

server-id = 12
log-bin = mysql-bin                   #打开二进制功能,MASTER主服务器必须打开此项
expire_logs_days=15                   #日志过期时间
max_binlog_size=1024M                 #binlog单文件最大值
binlog-rows-query-log_events=1        #可以在binlog日志中看到语句的原始sql
?
binlog-format=ROW
###binlog-row-p_w_picpath=minimal     #允许应用程序只能对行的镜像数据进行复制,而不在关心行是否已经进行了DML操作
?
###gtid模式关键参数
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=true #从库做为其他从库的主库时用

master-info-repository=TABLE
relay-log-info-repository=TABLE

##从库用,验证 binlog 内容的正确性
binlog-checksum=CRC32 #验证 binlog 内容的正确性
source-verify-checksum=1
replica_sql_verify_checksum=1

2)、重启MySQL服务

systemctl restart mysqld

3.主从搭建配置

1、master端

1)新建用户,mysql登陆进去

CREATE USER slave@'%' identified by 'Htjs_JS_2023';
GRANT Replication slave ON *.* to slave@'%';
ALTER USER slave@'%' IDENTIFIED WITH mysql_native_password BY 'Htjs_JS_2023';
flush privileges;

2)查看主库状态

MYSQL>show master status\G;

3)查看gtid状态

show  variables like '%gtid%';

2、slave端

1)从库上执行命令

change master to master_host='192.168.110.161',master_port=13306,master_user='slave',master_password='Htjs_JS_2023',master_auto_position=1 ;

2)开启同步

start slave;

3)查看同步状态

show slave status\G;

4.主从验证

1.主库新建数据库及用户

create database swgxpt CHARACTER SET utf8 ;

2.验证主从,从库执行

show slave status\G;

从库检查是否有无新建数据库、用户、相应的表结构。

【主从切换】:

切换步骤:

1 切断应用对主库的流量

2 主库、备库设置只读

set global read_only=ON;

set global super_read_only=ON;

3 查看备库复制进程状态

show slave status\G

确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0

4 比对主备两边的GTID是否一致

方法一:获取主备两边的executed_gtid集合,进行比对

select @@global.gtid_executed;

5 从库停掉复制进程并清空主从信息

stop slave;

reset slave all;

6 从库关闭只读开启读写,转为新主库

set global read_only=off;

set global super_read_only=off;

7 主库设置执行新主库的复制链路,转为新备库,完成主从切换

change master to master_host='192.168.110.162',master_port=13306,master_user='slave',master_password='Htjs_JS_2023',master_auto_position=1 ;

start slave;

show slave status\G

8 应用流量切向新主库

相关推荐
沃和莱特5 分钟前
C++中类的继承
数据库·c++·编程·c·指针·友元函数
FF在路上21 分钟前
MySQL数据库-视图的介绍和使用
数据库·sql·mysql
计算机毕设指导633 分钟前
基于SpringBoot的教学辅助平台系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·mybatis
数字扫地僧1 小时前
如何使用MySQL实现多租户架构:设计与实现全解析
数据库·mysql·架构
乄bluefox2 小时前
SpringBoot中使用Sharding-JDBC实战(实战+版本兼容+Bug解决)
java·数据库·spring boot·redis·后端·缓存·bug
尘佑不尘2 小时前
蓝队基础,了解企业安全管理架构
数据库·笔记·安全·web安全·蓝队
重生之我是数学王子2 小时前
QT 网络编程 数据库模块 TCP UDP QT5.12.3环境 C++实现
数据库·c++·qt·udp·tcp
running up that hill2 小时前
数据库中的增删改查操作、聚合函数、内置函数、分组查询
java·数据库·sql·mysql
莳花微语2 小时前
oracle如何配置第二个监听优化数据传输
数据库·oracle·php
小码的头发丝、2 小时前
Maven的安装与配置
java·数据库·maven