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 应用流量切向新主库

相关推荐
一屉大大大花卷34 分钟前
初识Neo4j之入门介绍(一)
数据库·neo4j
叁沐1 小时前
MySQL 08 详解read view:事务到底是隔离的还是不隔离的?
mysql
周胡杰1 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0011 小时前
navicate如何设置数据库引擎
数据库·mysql
ladymorgana1 小时前
【Spring Boot】HikariCP 连接池 YAML 配置详解
spring boot·后端·mysql·连接池·hikaricp
赵渝强老师1 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头1 小时前
Oracle注释详解
数据库·oracle
御控工业物联网1 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU3 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20253 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法