1、到指定目录下下载安装包

[root@VM-0-14-centos ~]# cd /usr/local/src

 2、下载mysql8

[root@VM-0-14-centos src]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

 3、解压mysql8, 通过xz命令解压出tar包, 然后通过tar命令解压出文件夹

[root@VM-0-14-centos src]# xz -d mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

[root@VM-0-14-centos src]# tar xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar

4、将/usr/local/src下的mysql-8.0.20-linux-glibc2.12-x86_64文件夹内容移动到/usr/local/mysql下

[root@VM-0-14-centos src]# mkdir /usr/local/mysql
[root@VM-0-14-centos src]# mv /usr/local/src/mysql-8.0.20-linux-glibc2.12-x86_64/* /usr/local/mysql
[root@VM-0-14-centos src]# cd /usr/local/mysql

5、创建用户组及用户和密码

[root@VM-0-14-centos mysql]# groupadd mysql

[root@VM-0-14-centos mysql]# useradd -g mysql mysql

6、授权用户

[root@VM-0-14-centos mysql]# chown -R mysql.mysql /usr/local/mysql

7、编辑my.cnf文件

[root@VM-0-14-centos mysql]# vim /etc/my.cnf

 按大写 i 进入修改模式 然后将下面的文本复制进去

[mysqld]

user=root

datadir=/usr/local/mysql/data

basedir=/usr/local/mysql

port=3306

max_connections=200

max_connect_errors=10

character-set-server=utf8

default-storage-engine=INNODB

default_authentication_plugin=mysql_native_password

lower_case_table_names=1

group_concat_max_len=102400

[mysql]

default-character-set=utf8

[client]

port=3306

default-character-set=utf8

 复制进去后按esc退出修改模式,然后按 shift+: 然后输入wq保存文件

8、进入到bin目录下

[root@VM-0-14-centos mysql]# cd bin

9、初始化基础信息,最后一行后面会有个随机的初始密码保存下来一会登录要用(如果忘记了就删掉data重新初始化)

[root@VM-0-14-centos bin]# ./mysqld --initialize

 如果提示 :./mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

就执行下下面这个再执行初始化

[root@VM-0-14-centos bin]# yum install -y libaio

[root@VM-0-14-centos bin]# yum -y install numactl

如果是没联网的机器,需要去https://pkgs.org/下载好rpm到机器安装

rpm -ivh XXX.rpm
[root@VM-0-14-centos bin]# ./mysqld --initialize

 记录日志最末尾位置root@localhost:后的字符串,此字符串为mysql管理员临时登录密码

 10、添加mysqld服务到系统

先返回到mysql目录

[root@VM-0-14-centos bin]# cd ..

[root@VM-0-14-centos mysql]# cp -a ./support-files/mysql.server /etc/init.d/mysql

11、授权以及添加服务

[root@VM-0-14-centos mysql]# chmod +x /etc/init.d/mysql
[root@VM-0-14-centos mysql]# chkconfig --add mysql

12、启动mysql

[root@VM-0-14-centos mysql]# service mysql start

13、将mysql添加到命令服务

[root@VM-0-14-centos mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin

14、登录mysql

[root@VM-0-14-centos mysql]# mysql -uroot -p

如果出现 mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

cd /usr/local/mysql/bin

ldd mysql

sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

15、输入刚刚初始化时生成的密码

16、更改root用户密码, 注意语句后的; 执行语句忘记写了 可以补个空的;回车也可以将语句执行

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

mysql> flush privileges;

17、更改root连接权限

mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;

18、exit; 退出mysql,现在就可以通过连接工具登录root账户进行远程连接了

至此,mysql8.0.20版本的数据库安装,已经完成。系统为CentOS Linux release 7.8.2003 (Core) 

-------------------------

脚本的方式一键安装mysql8

1、防止初始化的时候报错,先把下面两个装上

[root@VM-0-14-centos bin]# yum install -y libaio

[root@VM-0-14-centos bin]# yum -y install numactl

 2、编写install_mysql.sh脚本文件

#! /bin/bash
cd /usr/local/src
DfileName=mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
#解压

if [ -f ${DfileName} ];then
   echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 解压mysql压缩包!"
   tar -xvf ${DfileName}
   [ $? -eq 0 ] && echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 解压成功!"
	echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 创建mysql目录!"
	mkdir -p /usr/local/mysql
    #改目录名为mysql
    echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 改目录名为mysql!"
	mv /usr/local/src/mysql-8.0.11-linux-glibc2.12-x86_64/* /usr/local/mysql
	rm -rf /usr/local/src/mysql-8.0.11-linux-glibc2.12-x86_64
else
   echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 找不到mysql压缩包!"
   exit 1
fi

#创建、添加mysql用户组
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 创建、添加mysql用户组!"
groupadd mysql
useradd -r -g mysql mysql
#创建data空目录
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 创建data空目录!"
mkdir -p /usr/local/mysql/data
#关联myql用户到mysql用户组中
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 关联myql用户到mysql用户组中!"
chown -R mysql.mysql /usr/local/mysql
#编辑my.cnf配置文件 每次写入前清空此文件内容
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 编辑my.cnf配置文件!"
cat /dev/null > /etc/my.cnf
echo "[mysqld]" >> /etc/my.cnf
echo "user=root" >> /etc/my.cnf
echo "datadir=/usr/local/mysql/data" >> /etc/my.cnf
echo "basedir=/usr/local/mysql" >> /etc/my.cnf
echo "port=3306" >> /etc/my.cnf
echo "max_connections=200" >> /etc/my.cnf
echo "max_connect_errors=10" >> /etc/my.cnf
echo "character-set-server=utf8" >> /etc/my.cnf
echo "default-storage-engine=INNODB" >> /etc/my.cnf
echo "default_authentication_plugin=mysql_native_password" >> /etc/my.cnf
echo "lower_case_table_names=1" >> /etc/my.cnf
echo "group_concat_max_len=102400" >> /etc/my.cnf
echo "[mysql]" >> /etc/my.cnf
echo "default-character-set=utf8" >> /etc/my.cnf
echo "[client]" >> /etc/my.cnf
echo "port=3306" >> /etc/my.cnf
echo "default-character-set=utf8" >> /etc/my.cnf
#复制文件
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 添加mysqld服务到系统!"
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
#将mysql服务加到系统服务中
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 授权以及添加服务!"
chmod +x /etc/init.d/mysql
chkconfig --add mysql
#初始化,且密码为空
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 初始化,且密码为空!"
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure 
#添加到环境变量
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 添加到环境变量!"
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
source /etc/profile
#启动服务
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 启动服务!"
service mysql start
#软连接
echo -e "INFO `date +%Y-%m-%d_%H:%M:%S` 添加软连接!"
ln -s /usr/local/mysql/bin/mysql /usr/bin
#sudo ln -s /lib64/libtinfo.so.6 /lib64/libtinfo.so.5

2、编写connect.sh脚本文件,这是连接数据库修改密码的,运行可能会报错,不用管

#! /bin/bash
mysql -uroot<<EOF
use mysql;
update user set host ='%' where user='root';
ALTER USER "root"@"%" IDENTIFIED  BY "root";
flush privileges;
EOF

3、编写create_db.sh脚本文件

#! /bin/bash
#再次连接后执行sql就可以修改密码了,很奇怪,可能是因为初始化设置了空密码。
set_db() {
    mysql -uroot <<EOF
    use mysql;
    update user set host ='%' where user='root';
    ALTER USER "root"@"%" IDENTIFIED  BY "root";
    flush privileges;
EOF
echo "打开远程连接、修改密码成功"
}
 
set_db
#读取sql文件,并用文件名创建数据库
readDir() {
    # 获取传入的目录路径
    local dir=/usr/local/src/sql_path
    # 循环指定目录下的所有文件
    local files
    files=$(ls "$dir")
    for file in $files; do
        local path="$dir/$file" #指的是当前遍历文件的完整路径
        # 判断是否是目录,如果是目录则递归遍历,如果是文件则打印该文件的完整>路径
        if [ -d "$path" ]; then
            echo "跳过$path目录"
        else
            mysql -uroot -proot -e "CREATE DATABASE ${file%%.sql*} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
            mysql -uroot -proot ${file%%.sql*} -e "source $path"
            echo "执行sql文件${file%%.sql*}中"
        fi
    echo "运行成功"
    done
}
 
readDir
 
echo "finished install"

4、编写main.sh主脚本文件,主要是为了整合上面三个文件运行

#! /bin/bash
cd /usr/local/src
#给三个功能脚本授权运行
chmod +x install_mysql.sh
chmod +x create_db.sh
chmod +x connect.sh
 
./install_mysql.sh
 
./connect.sh
echo "连接mysql中"
./create_db.sh

5、去到/usr/local/src路径下,把下载好的包和4个脚本文件放入该路径。

6、因为这些脚本文件我是进行复制在Windows下面编辑的,所以导致了错误。在Windows中回车换行是\n\r,而Linux下则是\n,会导致多出来\r。所以解决方法就是去除掉多出来的\r。使用以下命令就可以对文件中的\r进行批量删除,4个都要执行

sed -i 's/\r$//' ***.sh

7、创建sql_path文件夹,把需要导入的sql文件放进去,create_db.sh脚本文件用sql来创建数据库并生成表数据

mkdir -p /usr/local/src/sql_path

8、授权并执行 main.sh主脚本文件

chmod +x main.sh
./main.sh

 

 

数据库安装完毕,并且数据导入成功!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐