一.环境说明
【环境说明】:
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-yum2.进入yum的目前做备份,并创建自建的yum源的文件
cd /etc/yum.repos.d/
mkdir bak
mv * bak#自建yum的文件
cat >zijian-yum.repo <
[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
EOFyum 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 应用流量切向新主库