本文的mysql数据库部署主要针对“5.7”版本(5.6版本也可以借鉴)
一、mysql数据库的部署
1、下载mysql软件包
下载地址:https://downloads.mysql.com/archives/community/
并根据自己的要求选择相应的版本:
2、在Linux中创建"/server/tools"目录,用于存放下载的软件包
[root@db01 ~]# mkdir -p /server/tools
[root@db01 ~]# cd /server/tools/
[root@db01 /server/tools]# yum install -y lrzsz #安装完lrzsz工具后,直接将压缩包拖拽到/server/tools目录下即可
[root@db01 /server/tools]# ls
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
3、解压软件
[root@db01 /server/tools]# tar xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #解压时最好使用“-v”参数,因为此文件解压时间有点长,不显示解压过程的话,会误以为卡住了。
[root@db01 ~]# mkdir /application
[root@db01 /server/tools]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql
4、创建数据库管理用户并设置环境变量
[root@db01 ~]# useradd -M mysql -s /sbin/nologin
/*
在/etc/profile文件中,永久设置环境变量PATH;
vim /etc/profile
要添加的内容
export PATH=/application/mysql/bin:$PATH
*/
[root@db01 ~]# source /etc/profile
[root@db01 ~]# mysql -V #产看mysql版本
mysql Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using EditLine wrapper
5、创建数据路径并授权
以上安装的都是mysql数据的软件信息,现在我们要新添加一块磁盘用来保存以后mysql数据库产生的数据信息,从而实现数据信息和软件信息的独立。以防止一块磁盘损坏时,所有的数据都丢失了。
1)在vmvare上db01虚拟机添加一块新的磁盘
2)格式化新磁盘并挂载
[root@db01 ~]# fdisk -l #查看磁盘是否添加成功
[root@db01 ~]# mkfs.xfs /dev/sdb #对新添加的磁盘进行格式化,然后才能挂载
[root@db01 ~]# mkdir /data #创建/data目录,用于存储mysql数据库产生的数据,所以需要将新的磁盘挂载在此目录下。
[root@db01 ~]# blkid
[root@db01 ~]# vim /etc/fstab #永久挂载
[root@db01 ~]# UUID="b7fde522-aa37-412a-9584-8313a673c5cc" /data xfs defaults 0 0
[root@db01 ~]# mount -a
[root@db01 ~]# df -h
6、授权
[root@db01 ~]# chown -R mysql:mysql /application/*
[root@db01 ~]# chown -R mysql:mysql /data
#让和mysql数据相关的目录,都让mysql用户来管理,否则mysql数据库启动时就可能会报错
7、初始化mysql数据库
[root@db01 ~]# mkdir -p /data/mysql/data
[root@db01 ~]# chown -R mysql:mysql /data #因为在/data目录下新创建了目录,新的目录的属主数组不是mysql,所以需要重新授权
[root@db01 ~]# mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
2019-06-13T04:21:27.706564Z 1 [Note] A temporary password is generated for root@localhost: =mrV)_16is4U (这里就是临时密码)
--initialize参数:在初始化的同时,也设置了数据库的临时密码
密码的复杂度:12位 4种字符
密码过期时间:180天
初始化过程种可能出现报错的情况:
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
缺少"libaio.so.1"这个依赖包
解决:
[root@db01 ~]# yum install -y libaio-devel
若是想在初始化时,不想要临时密码:可使用"–initialize-insecure"
[root@db01 /data/mysql/data]# \rm -rf /data/mysql/data/* (把上一种方式初始化产生的文件数据删除,重新初始化)
[root@db01 ~]# cd /usr/local/Percona-Server-5.7.26 && ./bin/mysqld --defaults-file=/mysql/my4339.cnf --initialize-insecure --basedir=/usr/local/Percona-Server-5.7.26
tip:5.6版本的mysql数据库初始化,只需执行
"/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/applicaiton/mysql/data"命令即可
因为MySQL 5.6版本中存放数据信息的"data"目录,在mysql-5.6.44-linux-glibc2.12-x86_64目录已经被创建好了,无需像MySQL 5.7版本那样自己创建
8、编辑配置文件,否则mysql数据库无法启动
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF
9、启动mysql数据库
1)第一种方式,针对的是CentOS 6 版本服务启动的方式
[root@db01 /etc/init.d]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@db01 /etc/init.d]# service mysqld restart
/*
service mysqld stop 停止mysql服务
service mysqld status 查看mysql服务的状态
*/
2)第二种方式,针对的是CentOS 7 版本服务启动的方式
注意:使用第一种方式启动了mysql服务的话,需要先关闭,才能使用第二种方式启动。
cat >/usr/lib/systemd/system/mysqld.service<<EOF #下面的信息可以在mysql官方网站上找到
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf #也可以在命令行执行此命令,启动mysql服务,只不过这种方式启动时,会把启动日志也打印在屏幕上。当mysql日志文件打不开或者无法写入时,可使用这种方式产看日志。
#--defaults-file参数:强制使用指定的配置文件
LimitNOFILE = 5000
EOF
10、管理员密码的设定(root@localhost)
[root@db01 ~]# mysqladmin -uroot password #一般系统不建议直接在命令行设置密码,这样别人就会很容易产看系统历史操作知晓数据库的密码
Enter password: #(在提示的后面输入自己要设置的密码)
二、数据库基础维护
管理员用户密码忘记怎么办?
1、关闭数据库
[root@db01 ~]# systemctl stop mysqld
Shutting down MySQL.. SUCCESS!
2、启动数据库到维护模式
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking & #(&:后台运行)
--skip-grant-tables #跳过授权表 跳过mysqld进程结构中连接层的授权表,这样mysql就不会去验证用户的合法性了,同时也就无法在数据库中使用grant命令修改用户的密码,或者给用户授权了。若是想用grant命令,则需要flush privileges 把授权表重新加载了
--skip-networking #跳过远程登录 这样就只能本地操作数据库,不能通过远程连接软件连接数据库
3.登录mysql数据库并修改密码
[root@db01 ~]# mysql #使用mysql 命令直接登录数据库,无需指定用户及密码
更改操作:
mysql> alter user root@'localhost' identified by '1';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '1'; #(alter 也可修改用户的密码)
Query OK, 0 rows affected (0.01 sec)
tip:在mysql.user数据表中存储着数据库管理者的信息,user host authentication_string 三个字段分别存储着用户名、主机地址、用户密码信息
4、关闭数据库,使用新设置的密码重新登录
mysql数据库的日志文件位置:/data/mysql/data/主机名.err