玩命加载中🤣🤣🤣

tar包安装mysql


记一次tar包安装mysql的流程详解

需要用到的知识点

安装前置

## 检查是否已经安装
rpm -qa | grep mysql
## 如果已经存在,则执行删除命令
rpm -e --nodeps 名字
## 查找是否有mysql相关的进程
ps -ef|grep mysql | grep -v grep
ps -ef|grep mysqld | grep -v grep
## 如果有,则将其杀死
kill -9 进程号

如果安装成功/失败后的卸载

## 查找所有mysql的文件夹和文件并删除
find / -name "mysql" -exec rm -rf {} \;
find / -name mysqld -exec rm -rf {} \;
## 删除mysql用户和用户组
userdel -r -f mysql
groupdel mysql
## 删除配置文件
rm -rf /etc/my.cnf
## 删除 ~/.bashrc 中的环境变量
sed -i '/mysql/d' /root/.bashrc
## 删除内核修改数配置
sed -i '/ulimit -n 1000000/d' /etc/rc.local
## 删除服务
/sbin/chkconfig --del mysqld

reboot

涉及到的相关命令

find

find相关命令链接

find / -name "mysql" -exec rm -rf {} \;  ## 查询mysql的文件/文件夹并删除

用户及用户组

用户相关命令链接

环境变量

用户相关命令链接

env  ## 查询所有环境变量
export VARNAME=vlue  ## 设置环境变量
unset VARNAME  ##取消环境变量

sed

sed相关命令链接

sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config  ## 将SELINUX改为disabled s 表示替换
chown mysql:mysql /data/mysql/  ## 将/data/mysql 目录权限修改为mysql组的mysql用户
sed  -i '70c  datadir=/data/mysql'  /etc/init.d/mysqld  ## 将整个70行替换

Mysql忘记root密码

  • 修改 /etc/my.cnf
  • [mysqld] 中添加 skip-grant-tables (开启免密登录)
  • 重启mysql systemctl restart mysql
  • 登录控制台 mysql
  • 更新密码
    • update user set authentication_string=password('新密码') where user='root';
    • flush privileges;

Mysql导入和导出数据库

导出

mysqldump -uroot -p<mysqlpwd> -h127.0.0.1 -P3306 <db_name> > <db_name.sql>
## 例如
/usr/local/mysql/bin/mysqldump -uroot -p1234 -h127.0.0.1 -P3306 dee_db > dee_db.sql
## 精简版
cd /usr/local/mysql/bin
./mysqldump -uroot -p1234 rainbow > /root/dee_rainbow.sql

-u: 使用root用户
-p: 使用root用户的密码
-h:指定访问主机
-P:指定端口号
db_name : 指定导出的数据库名称
db_name.sql : 指定导入存储的数据文件

导入

#### 第一种方式
mysql -uroot -p<mysqlpwd> <db_name> < <db_name.sql>
## 例如
mysql -uroot -p1234 dee_db < dee_db.sql

#### 第二种方式 source
## 1.进入数据库
mysql -u root -p
use 数据库;
## 2.source命令
source /root/数据库.sql
## 3.刷新权限
flush PRIVILEGES;

附:查看数据库大小

## 查看单个数据库大小
SELECT table_schema "db_name",
    sum( data_length + index_length ) / 1024 / 1024 "db_size_MB"
FROM information_schema.TABLES
WHERE table_schema = "数据库名称";

## 查询所有数据库大小
SELECT table_schema "db_name",
    sum( data_length + index_length ) / 1024 / 1024 "db_size_MB"
FROM information_schema.TABLES
GROUP BY table_schema;

## 查询单个表的大小
SELECT table_name "db_name",
    sum( data_length + index_length ) / 1024 / 1024 "table_size_MB"
FROM information_schema.TABLES
WHERE table_name = "table_name";

## 查询所有表的大小
SELECT table_name "table_name",
    sum( data_length + index_length ) / 1024 / 1024 "table_size_MB"
FROM information_schema.TABLES
GROUP BY table_name;

安装shell脚本

⭐先把安装包和安装脚本放入同一个文件夹下

dee_install_mysql.sh

#!/bin/bash

## 细节注意: 此处不能将mysql 密码变量设为PWD, 在 ./mysql_ssl_rsa_setup --datadir=/data/mysql/ 这行命令中会重置PWD变量
MYSQL_PWD="1234"

#解压mysql二进制安装包
tar  -zxvf  mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

#移动mysql解压后的文件到/usr/local下改名叫mysql
mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql

#新建组和用户 mysql
groupadd mysql
#mysql这个用户的shell 是/bin/false 属于mysql组,不允许登录
useradd -r -g mysql -s /bin/false mysql

#关闭firewalld防火墙服务,并且设置开机不要启动
service firewalld stop
systemctl  disable  firewalld

#临时关闭selinux
setenforce 0
#永久关闭selinux
sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config

#新建存放数据的目录
mkdir  /data/mysql -p
#修改/data/mysql目录的权限归mysql用户和mysql组所有,这样mysql用户可以对这个文件夹进行读写了
chown mysql:mysql /data/mysql/
#只是允许mysql这个用户和mysql组可以访问,其他人都不能访问
chmod 750 /data/mysql/

#进入/usr/local/mysql/bin目录
cd /usr/local/mysql/bin/

#初始化mysql
./mysqld  --initialize --user=mysql --basedir=/usr/local/mysql/  --datadir=/data/mysql  &>passwd.txt

#让mysql支持ssl方式登录的设置
./mysql_ssl_rsa_setup --datadir=/data/mysql/

#获得临时密码
tem_passwd=$(cat passwd.txt |grep "temporary"|awk '{print $NF}')
  #$NF表示最后一个字段
  # abc=$(命令)  优先执行命令,然后将结果赋值给abc

# 修改PATH变量,加入mysql bin目录的路径
#临时修改PATH变量的值
export PATH=/usr/local/mysql/bin/:$PATH
#重新启动linux系统后也生效,永久修改
echo  'PATH=/usr/local/mysql/bin:$PATH' >>/root/.bashrc

#复制support-files里的mysql.server文件到/etc/init.d/目录下叫mysqld
cp  ../support-files/mysql.server   /etc/init.d/mysqld

#修改/etc/init.d/mysqld脚本文件里的datadir目录的值
sed  -i '70c  datadir=/data/mysql'  /etc/init.d/mysqld

#生成/etc/my.cnf配置文件
cat  >/etc/my.cnf  <<EOF
[mysqld_safe]

[client]
socket=/data/mysql/mysql.sock

[mysqld]
socket=/data/mysql/mysql.sock
port = 3306
character-set-server=utf8
default-storage-engine=INNODB

join_buffer_size = 512M
tmp_table_size = 1G
max_allowed_packet = 64M
interactive_timeout = 1800
# 默认8小时
wait_timeout = 1800
read_buffer_size = 128M
read_rnd_buffer_size = 256M
sort_buffer_size = 256M
key_buffer_size=512M
back_log=500
flush_time=0
open_files_limit=4161
table_definition_cache=1400
binlog_row_event_max_size=16M

# MySQL服务器最大连接数
max_connections=1000
max_connect_errors = 1000

# MySQL服务器线程缓存大小
thread_cache_size=500

# 日志缓冲刷新的频繁程度
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_log_buffer_size=256M
innodb_thread_concurrency=32
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
innodb_lock_wait_timeout = 50

# 瓶颈位,即使在并发量不高的时候也会出现,最好的选择是从一开始就禁用它
query_cache_size = 0

slow-query-log=1
long_query_time=10

lower_case_table_names=1
table_open_cache=4096

autocommit = 1
skip_name_resolve = 1
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysql]
auto-rehash
prompt=\\u@\\d \\R:\\m  mysql>
EOF

#修改内核的open file的数量
ulimit -n 1000000
#设置开机启动的时候也配置生效
echo "ulimit -n 1000000" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local


#启动mysqld进程
service mysqld start

#将mysqld添加到linux系统里服务管理名单里
/sbin/chkconfig --add mysqld
#设置mysqld服务开机启动
/sbin/chkconfig mysqld on

#初次修改密码需要使用--connect-expired-password 选项
#-e 后面接的表示是在mysql里需要执行命令  execute 执行
mysql -uroot -p$tem_passwd --connect-expired-password -e "set password='$MYSQL_PWD';"

#检验上一步修改密码是否成功,如果有输出能看到mysql里的数据库,说明成功。
mysql -uroot -p$MYSQL_PWD  -e "show databases;"

ln -s /usr/local/mysql/bin/mysql /usr/bin


echo "开始执行 >>> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_PWD' WITH GRANT OPTION;"
mysql -uroot -p$MYSQL_PWD  -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_PWD' WITH GRANT OPTION;"
echo "开始执行 >>> FLUSH PRIVILEGES;"
mysql -uroot -p$MYSQL_PWD  -e "FLUSH PRIVILEGES;"

echo "successful inject database"

文章作者: 👑Dee👑
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 👑Dee👑 !
  目录