软件版本:
mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
1
安装依赖:
shell> yum search libaio # search for info
shell> yum install libaio # install library
1.检查是否已经安装了mysql或者是MariaDB,如果已经安装,则先把安装的卸载:
rpm -qa | grep mysql
rpm -qa | grep mariadb
l服务器哪怕有一丁点mysql残留,都可能会导致安装失败,因此一定要确保卸载干净。可通过下面的命令彻底卸载掉安装的mysql:
查询mysql相关文件并删除
find / -name "mysql*" |xargs rm -rf
find / -name "mariadb*" |xargs rm -rf
注意:如果服务器项目引用有带mysql字样的jar,执行上面的命令也会把jar删掉,因此安装好请把mysql相应jar补上,否则启动会报异常。
卸载举例:
yum -y remove mariadb-libs-5.5.56-2.el7.x86_64
- 通过winSCP或者是Xftp等工具将安装包上传到CentOS上,或者使用wget命令在线安装也可以,速度会比网上下载再上传到服务器要快得多。方法是,进入到指定目录如/usr/local/package,执行下面的命令:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
这样系统就会将安装包下载到/usr/local/package目录,如果没有wget命令,则需要先安装该命令。
将安装包解压到指定目录、重命名mysql(建议解压到/usr/local,参数C要大写)
[root@H1 local]#tar -xzvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz -C /usr/local
#重命名为mysql
[root@H1 local]mv mysql-5.7.21-linux-glibc2.12-x86_64 mysql
3.添加新的用户组和新的用户,用来管理mysql,提高安全性(非必要的,不过mysql官网安装步骤推荐这样做,这个步骤可以省略):
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
4.切换到/usr/local目录,新建mysql的data目录和logs目录:
cd mysql
[root@H1 mysql]# mkdir data #新建存储数据的目录
[root@H1 mysql]# mkdir logs #新建存放日志的目录
[root@H1 mysql]# touch ./logs/mysqld.log #新建存放日志的文件
修改mysql目录用户为刚刚新建的mysql组中的mysql用户 #未创建可忽略
[root@H1 mysql]#chown -R mysql:mysql ./
或者chown -R mysql:mysql /usr/local/mysql/
5.初始化数据库:
初始化数据库的时候在页面会打印出mysql数据库的root账户的密码。
[root@H1 mysql]#./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
密码所在
2021-01-02T04:34:51.525788Z 1 [Note] A temporary password is generated for root@localhost: p<6QaoerI2kd
密码是p<6QaoerI2kd
或者这样寻找密码:
grep ‘password’ /var/log/mysqld.log #仅对于yum安装有效
6.修改my.cnf配置文件, 通过mysql官网可以知道,从版本5.7.18开始,mysql免安装版二进制包中就不包含该文件了,即不需要my.cnf文件也可以正常运行;my.cnf文件中配置的选项会在命令行启动mysql的时候作为参数进行启动,为了后面搭建mysql主从环境方便,下面可以添加了一个简单的my.cnf文件作为实例(如果只是单纯的搭建一个mysql实例,可以直接忽略此步骤),使用vim /etc/my.cnf命令,如果在该目录上不存在则会新建,注意,创建的mysql配置文件一定要命名为my.cnf,不要命名为my.conf之类的,要不然在上面的配置,mysql识别不了。(mysql默认会去/etc/目录下查找my.cnf文件)。
vim /etc/my.cnf
内容如下:
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql #解压路径
datadir=/usr/local/mysql/data #data目录
socket=/usr/local/mysql/mysql.sock
#设置忽略大小写(简单来说就是sql语句是否严格),默认库名表名保存为小写, 不区分大小写
lower_case_table_names = 1
# 开启ip绑定
bind-address = 0.0.0.0
[mysqld_safe]
#日志目录和日志文件用上面提前建好的,方便查看mysql运行日志,千万不要搞个不存在的
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid
#指定客户端连接mysql时的socket通信文件路径
[client]
socket=/usr/local/mysql/mysql.sock #跟上面定义的一致就好
default-character-set=utf8
7.将mysql添加至开机启动:
创建配置以及修改:
[root@H1 mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld
执行上面的命令如果出现cp: cannot create regular file '/etc/init.d/mysqld': No such file or directory,只需执行了一下
dnf install chkconfig命令,再执行 cp ./support-files/mysql.server /etc/init.d/mysqld就可以拷贝和重命名文件成功。
修改mysqld,使用vim /etc/init.d/mysqld 命令 修改以下代码部分,basedir和datadir文件已经有,只需在=号后面赋值即可
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
设置开机启动:
chkconfig --add mysqld
8.mysql已经算是安装完毕了,接下来使用以下命令启动mysql
service mysqld start
- 为了可以在任意目录上都可以使用mysql命令登录mysql,将mysql安装目录配置到环境变量中,
vim /etc/profile
在/etc/profile文件的末尾添加以下代码
export PATH=$PATH:/usr/local/mysql/bin
让配置生效
source /etc/profile
10.重启mysql服务, 并且使用mysql的root用户登录mysql,密码在第8步最后一行有
service mysqld restart
登录mysql-shell:
[root@H1 mysql] mysql -uroot -p
如果执行上面命令报这样的错:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory。可尝试执行这样的命令解决:yum install libncurses*
言归正传,如果执行命令正常,使用前面得到的密码是p<6QaoerI2kd尝试登录。
修改root用户的密码为123456,并且刷新:
mysql> alter user 'root'@'localhost' identified by '123456'; #修改密码为123456
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
- 此时mysql数据库只能在本机上使用mysql命令进行登录,还无法使用navicat等数据库可视化工具进行远程登录,下面设置允许root用户远程连接数据库
mysql> use mysql; #使用mysql用户,后续设置mysql用户下可使用可视化工具进行登录
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set user.Host='%' where user.User='root'; #设置 root用户可以远程访问
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@localhost mysql]#
登录成功后,打开名称为"mysql"的数据库(myql > show tables),查看"mysql"数据库的表(mysql > show tables),其中有一张user表是我们需要更新的。
当然,如果上面已经更新密码也可以了。
update user set authentication_string=password(‘123456’) where user=‘root’;
为了方便试验,此处已事先使用 systemctl stop firewalld 命令将防火墙关闭,在实际使用中,只需要开放数据库运行的3306端口即可。
启动mysql服务:service mysqld start
停止mysql服务: service mysqld stop
重启mysql服务:service mysqld restart
查看状态:service mysqld status
12 创建ambari数据库及数据库的用户名和密码(如果要安装ambari的话)
set global validate_password_policy=0;
set global validate_password_length=1;
create database ambari character set utf8;
create user 'ambari'@'%' identified by 'ambari';
grant all privileges on ambari.* to 'ambari'@'%';
flush privileges;
13.创建hive数据库及hive库的用户名和密码(如果要安装hive的话)
set global validate_password_policy=0;
set global validate_password_length=1;
create database hive character set utf8;
create user 'hive'@'%' identified by 'hive'; #用户hive 的密码hive
grant all privileges on ambari.* to 'hive'@'%';
grant all privileges on hive.* to 'hive'@'%';
flush privileges;
官方推荐安装步骤:
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chown mysql:mysql mysql-files
shell> chmod 750 mysql-files
shell> bin/mysqld --initialize --user=mysql
shell> bin/mysql_ssl_rsa_setup
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server
mysql安装–官网参考
如果忘记密码,可修改/etc/my.cnf文件,在[mysqld]下方添加skip-grant-tables,意思是跳过权限表的校验,可以免密登录,然后修改密码。
注意事项:.重要的事情多说几遍,配置文件一定要命名为my.cnf,最好放在/etc目录下,这样mysql启动时就会去读取,曾经我命名为其他,如my.conf,明明我在文件已经加上这句:
lower_case_table_names = 1
但是项目启动后还是提示有些大写命名的表不存在,可是数据库中明明已经有这张表,只不过是小写而已。原因就是mysql配置文件没有命名为my.cnf.
show variables like '%case_table%';
是用来告诉mysql不区分表名大小写的,
其中0表示严格区分大小写,1表示不区分