记一次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 / -name "mysql" -exec rm -rf {} \; ## 查询mysql的文件/文件夹并删除
用户及用户组
环境变量
env ## 查询所有环境变量
export VARNAME=vlue ## 设置环境变量
unset VARNAME ##取消环境变量
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"