Centos7离线rpm安装MySQL-5.7.29【推荐】

Centos7离线rpm安装MySQL-5.7.29

一.彻底卸载系统原装的MySQL

1.查找mysql进程

如果查到的结果不为空,则进入第2步卸载mysql

rpm -qa|grep -i mysql
2.卸载mysql
#停止mysql服务
systemctl stop mysqld
#删除软件命令
rpm -e –nodeps $(rpm -qa|grep -i mysql)

# 如果提示依赖包错误,则使用以下命令尝试:
rpm -ev $(rpm -qa|grep -i mysql) --nodeps

# 如果提示错误:error: %preun(xxxxxx) scriptlet failed, exit status 1
# 则用以下命令尝试:
rpm -e --noscripts $(rpm -qa|grep -i mysql)
3.删除mysql目录和文件
#删除卸载后残留的mysql的目录
find / -name mysql    #然后使用 rm -rf 将查询到的目录全部删除


#删除残留的mysql的配置文件
rm -rf /etc/my.cnf
rm -rf /etc/my.cnf.d

二.下载rpm安装包

方式一:使用百度网盘下载:

  • 链接:https://pan.baidu.com/s/1Z8NX1IQNni4zykrWvnesig
  • 提取码:275a

方式二:在MySQL官网中找到YUM源rpm安装包:
下载页面:https://downloads.mysql.com/archives/community/

Centos7离线rpm安装MySQL-5.7.29【推荐】_第1张图片

具体下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar

上传并解压rpm的压缩包

mkdir -p /baicdt/softwares/mysql_rpm
cd /baicdt/softwares/

# 使用rz命令将下载的tar包上传到当前目录 yum -y install lrzsz
# 解压至/baicdt/softwares/mysql_rpm目录
tar -xvf /baicdt/softwares/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar -C /baicdt/softwares/mysql_rpm/

三.安装mysql

# 进入解压后的目录删除不需要安装的包
cd /baicdt/softwares/mysql_rpm

扩展:各rpm包的作用如下表,我们仅安装使用到的包即可

NO 包名 作用 是否安装
1 client MySQL客户端
2 common 服务端和客户端常用库文件
3 devel 客户端开发用的头文件及库
4 embedded 嵌入式版本
5 embedded-compat 兼容老版本嵌入式的共享库
6 embedded-devel 嵌入式版本的头文件与库
7 libs 数据库客户端共享库
8 libs-compat 兼容老版本的共享库
9 server 数据库服务端与相关工具
10 test MySQL测试套件

开始安装:

# 注意:因逐层建存在依赖,安装顺序不要随意变
yum remove mysql-libs
cd /baicdt/softwares/mysql_rpm
rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.29-1.el7.x86_64.rpm

# 删除安装包后,查看是否安装成功
rm -rf /baicdt/softwares/mysql_rpm/* && rpm -qa|grep -i mysql

四.启动mysql服务

#1.临时启动mysql服务
systemctl start mysqld

#2.开机启动mysql服务
systemctl enable mysqld

#3.查看MySQL的启动状态
systemctl status mysqld

#4.查看mysql进程是否正常开启
ps -le | grep mysqld
netstat -ntlp | grep mysqld

五.修改mysql密码

1.首次登陆mysql

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过以下命令找到密码:

grep 'temporary password' /var/log/mysqld.log

在这里插入图片描述

# 使用刚才找到的密码登录MySQL
mysql -u root -p
-- 修改root用户密码(二选一)
set password for 'root'@'localhost'=password('Wsygzgr_2020');
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Wsygzgr_2020';
2.修改密码策略

生产环境为了安全考虑,不要改密码策略!!!

测试机环境为了方便记mysql密码,可选择下面的方案①:

vim /etc/my.cnf

在配置文件中添加下面的内容:

#因为服务器是测试环境,为了方便记mysql密码,关闭了密码策略。如果是生产环境,则不建议修改密码策略
validate_password=off

重新启动mysql服务使配置生效:

systemctl restart mysqld
#登陆mysql
mysql -u root -pWsygzgr_2020

修改root用户密码为123456

set password for 'root'@'localhost'=password('123456');

MySQL默认配置文件路径:

  • 配置文件: /etc/my.cnf
  • 日志文件: /var/log//var/log/mysqld.log
  • 服务启动脚本: /usr/lib/systemd/system/mysqld.service
  • socket文件: /var/run/mysqld/mysqld.pid
3.修改MySQL默认编码

编辑 vim /etc/my.cnf 配置文件,添加如下配置:

skip_ssl
character_set_server=utf8
init_connect='SET NAMES utf8'

重启MySQL服务

systemctl restart mysqld
# 登陆mysql
mysql -uroot -p123456

查看MySQL默认编码确认是否修改成功:

show variables like 'char%';

Centos7离线rpm安装MySQL-5.7.29【推荐】_第2张图片

查看排序规则

show variables like 'collation%';

Centos7离线rpm安装MySQL-5.7.29【推荐】_第3张图片

4.用户远程登录配置

mysql默认只允许root帐户在本地登录,想要远程连接mysql,必须开启root用户允许远程连接,或者添加一个允许远程连接的帐户。

开启root用户远程连接(任意IP都可以访问)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

扩展:

  • 指定特定的IP,开启root用户远程连接

    GRANT ALL PRIVILEGES ON . TO 'root'@'指定的IP' IDENTIFIED BY 'root用户的密码' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  • 一般为了安全起见,会创建专用只读权限账号给的特定的IP地址

    GRANT SELECT ON 库名.表名 TO '账号名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

六.忘记root用户密码解决方案

编辑 vim /etc/my.cnf 配置文件,添加如下配置:

[mysqld]
skip-grant-tables

重启mysql,并不使用密码登录mysql

systemctl restart mysqld
mysql  -u root

修改root用户的密码

update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
flush privileges

设置好密码后再删掉/etc/my.cnf中的skip-grant-tables配置项,并重启mysql

七.创建新用户

-- 创建新用户
CREATE USER '新用户名'@'%'IDENTIFIED BY '设置新用户的密码';
-- 把数据库的访问权限给新用户
GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'%' IDENTIFIED BY '密码'; 
-- 给新用户开启所有远程访问权限
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
-- 刷新mysql的权限列表            
FLUSH PRIVILEGES;  

八.开启binlog日志

https://blog.csdn.net/wwwdc1012/article/details/88373440

binlog日志简单介绍:

  • 用来记录mysql中的 增加 、 删除 、 修改 操作
  • select操作 不会 保存到binlog中
  • 必须要 打开 mysql中的binlog功能,才会生成binlog日志
  • binlog日志就是一系列的二进制文件

编辑 vim /etc/my.cnf 配置文件,添加如下配置:

log-bin=/var/lib/mysql/mysql-bin 
binlog-format=ROW 
server_id=1

配置说明:

  1. 配置binlog日志的存放路径为/var/lib/mysql目录,文件以mysql-bin开头
  2. 配置mysql中每一行记录的变化都会详细记录下来
  3. 配置当前机器器的服务ID(如果是mysql集群,不能重复)

重启mysql并登录

systemctl restart mysqld
mysql -u root -p123456

登录mysql执行以下SQL命令查看配置是否生效

show variables like '%log_bin%';

mysql输出以下内容,表示binlog已经成功开启

+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
| sql_log_bin                     | ON                             |
+---------------------------------+--------------------------------+
6 rows in set (0.00 sec)

查看生产的binlog日志,为二进制格式

[root@core01 ~]# cd /var/lib/mysql
[root@core01 mysql]# ll -ah | grep mysql-bin.000001
-rw-r-----   1 mysql mysql  154 Jul 17 10:36 mysql-bin.000001

# 导出binlog内容到文件中
mysqlbinlog --base64-output=decode-rows  --start-datetime='2021-11-15 10:00:19' --stop-datetime='2021-11-15 15:30:19' /var/lib/mysql/mysql-bin.000001 > /root/temp01.log -v
more /root/temp01.log

查看binlog日志的内容

show binlog events in 'mysql-bin.000001'; 

九.主从复制配置

安装环境:

主(Master) centos7:192.168.52.100

从(Slave) centos7:192.168.52.110

1. Master的配置
vim /etc/my.cnf

配置的内容为:

#主节点开启二进制日志功能
log-bin=mysql-bin
#标识唯一id(必须),一般使用ip最后位
server-id=100
#不需要同步的数据库,可设置多个
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
#指定需要同步的数据库,可以设置多个
binlog-do-db=test
binlog-do-db=demo

修改完配置,重启mysql

systemctl restart mysqld
#进入Mysql
mysql -u root -p123456

    赋予从库权限帐号,允许用户在主库上读取日志,赋予192.168.52.110也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。

GRANT FILE ON *.* TO 'root'@'192.168.52.110' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.52.110' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

重启Mysql后查看主库信息

show master status;

Centos7离线rpm安装MySQL-5.7.29【推荐】_第4张图片

    这里的 File 、Position 是在配置Salve的时候要使用到的,Binlog_Do_DB表示要同步的数据库,Binlog_Ignore_DB 表示Ignore的数据库,这些都是在配置的时候进行指定的。
    另外:如果执行这个步骤始终为Empty set(0.00 sec),那说明前面的my.cnf没配置对。

2. Slave的配置
vim /etc/my.cnf

配置的内容为:

#主节点开启二进制日志功能
log-bin=mysql-bin
#标识唯一id(必须),一般使用ip最后位
server-id=110

#指定不需要复制的数据库(与主节点binlog-ignore-db要一一对应)
replicate-ignore-db=information_schema
replicate-ignore-db=mysql

#指定需要同步的数据库(与主节点binlog-ignore-db要一一对应)
replicate-do-db=test
replicate-do-db=demo

#此选项告诉从属服务器将其SQL线程执行的更新记录到其自己的二进制日志中。
log-slave-updates
#跳过所有错误
slave-skip-errors=all
slave-net-timeout=60

修改完配置,重启mysql

systemctl restart mysqld
#进入Mysql
mysql -u root -p123456
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='192.168.52.100',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
-- 开启Slave
START SLAVE; 

    在这里指定Master的信息,master_log_file是在配置Master的时候的File选项, master_log_pos是在配置Master的Position 选项,这里要进行对应。

查看配置的信息:

SHOW SLAVE STATUS \G;

当查询结果中包含下面两行结果,则表示配置成功了

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

对主库做增删改操作,验证从库数据同步情况。

十、开启日志模式(查看SQL执行记录)

-- 1. 设置
-- 开启日志
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
SHOW VARIABLES LIKE '%general_log%';

-- 2. 查询
SELECT * FROM mysql.general_log ORDER BY event_time DESC;

-- 3. 清空表,不能对此表使用delete操作,只能用truncate
truncate table mysql.general_log;

-- 4. 关闭日志
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'OFF';

以日志文件的形式查看:

-- 
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log = 'ON';
-- 直接监控日志文件  tail -f /var/lib/mysql/config.log

-- 关闭日志
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'OFF';

十一、shell命令执行MySQL

1.mysql.sh执行SQL语句

mysql -uroot -p123456 -e "CREATE DATABASE IF NOT EXISTS \`azkaban\`;USE \`azkaban\`;"
mysql -uroot -pWsygzgr_2022 -e "./source aaa.sql"

2.mysql.sh执行.sql脚本

mysql -uroot -p123456 -Dazkaban</opt/softwares/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql

3.shell脚本传参生成mysql脚本并执行

custom_sql.sh

#!/bin/sh

PARAM_1ST=$1
CUR_TIMESTAMP=`date +%Y-%m-%d\ %H:%M:%S`
echo -e "\e[40;32m[0] \$0参数为: $0 \e[0m"
echo -e "\e[40;32m[1] \$参数为: $PARAM_1ST \e[0m"
echo -e "\e[40;32m[2] 当前时间:$CUR_TIMESTAMP \e[0m"

echo -e "\e[40;32m[3] 准备生成 aaa.sql 脚本 \e[0m"
cat > aaa.sql << EOF
-- 脚本生成时间: $CUR_TIMESTAMP
CREATE DATABASE IF NOT EXISTS \`az_workflow_dev\` DEFAULT CHARACTER SET utf8;
USE az_workflow_dev;
DROP TABLE IF EXISTS \`workflow_regist\`;
CREATE TABLE \`workflow_regist\`
(
    \`id\`              int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
    \`work_name\`       varchar(128) NOT NULL COMMENT '任务名称[全局唯一]',
    \`work_desc\`       varchar(512)  DEFAULT NULL COMMENT '任务描述',
    \`devops_user\`     varchar(128) NOT NULL COMMENT '维护人',
    \`devops_phone\`    varchar(32)  NOT NULL COMMENT '维护人电话',
    \`devops_email\`    varchar(256) NOT NULL COMMENT '维护人email',
    \`devops_dingding\` varchar(1024) DEFAULT NULL COMMENT '维护人钉钉号',
    \`dingbot\`         varchar(1024) DEFAULT NULL COMMENT '预警钉钉群',
    \`version\`         int(10) unsigned NOT NULL DEFAULT '1' COMMENT '版本号',
    \`created_at\`      timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    \`updated_at\`      timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    \`is_deleted\`      tinyint(1)    DEFAULT '0' COMMENT '是否删除',
    PRIMARY KEY (\`id\`) USING BTREE,
    KEY \`workName_KEY\` (\`work_name\`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Azkaban工作流注册表';
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (1, 'first_work_name', '第一个工作流', 'DevimKim', '13770473170', '[email protected]', '大数据', NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (2, 'second_work_name', '第二个工作流', 'DevimKim', '13770473170', '[email protected]', NULL, NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (3, 'third_work_name', '第三个工作流', 'jinyanxu4', '13770473170', '[email protected]', '大数据', NULL, 4, '2022-05-16 12:40:07', '2022-05-16 12:48:27', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (4, 'fourth_work_name', '第四个工作流', 'DevimKim', '13770473170', '[email protected]', NULL, NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (5, 'fifth_work_name', '第五个工作流', 'DevimKim', '13770473170', '[email protected]', '大数据', NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (6, 'sixth_work_name', '第六个工作流', 'DevimKim', '13964213170', '[email protected]', NULL, NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (7, 'seventh_work_name', '第七个工作流', 'DevimKim', '13964213170', '[email protected]', '大数据', NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);
INSERT INTO \`az_workflow_dev\`.\`workflow_regist\`(\`id\`, \`work_name\`, \`work_desc\`, \`devops_user\`, \`devops_phone\`, \`devops_email\`, \`devops_dingding\`, \`dingbot\`, \`version\`, \`created_at\`, \`updated_at\`, \`is_deleted\`) VALUES (8, 'eighth_work_name', '第八个工作流', 'DevimKim', '13964213170', '[email protected]', '大数据', NULL, 1, '2022-05-16 12:40:07', '2022-05-16 12:40:07', 0);

select * from az_workflow_dev.workflow_regist;
select version();
select sleep(2);
select * from az_workflow_dev.workflow_regist where work_name = '$PARAM_1ST';
EOF

mysql -uroot -pWsygzgr_2022 -e"source aaa.sql"
./custom_sql.sh fifth_work_name

你可能感兴趣的:(部署运维相关,mysql,数据库,database)