安装之前先检查当前服务器上是否安装过MySQL:
rpm -qa|grep mysql
如果有安装包显示出来,使用rpm -e 进行卸载。
添加mysql用户组和用户,以及mysql的安装目录:
[root@localhost src]# groupadd mysql
[root@localhost src]# useradd -g mysql -s /sbin/nologin -M mysql
[root@localhost src]# mkdir /usr/local/mysql
[root@localhost src]# id mysql
uid=501(mysql) gid=501(mysql) groups=501(mysql)
给mysql的安装目录授权:
[root@localhost src]# chown -R mysql.mysql /usr/local/mysql
[root@localhost src]# ll /usr/local/
drwxr-xr-x. 2 mysql mysql 4096 May 11 09:09 mysql
源码安装:
先下载mysql-5.6.36源码包,建议先在本地下载好传到服务器/usr/local/src目录中:
[root@localhost src]#wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.36.tar.gz
[root@localhost src]#tar -zxf mysql-5.6.36.tar.gz
安装依赖:
[root@localhost src]#yum install -y cmake bison bison-devel libaio-devel gcc gcc-c++ git ncurses ncurses-devel autoconf
解压缩之后进入,mysql5.6起都是通过cmake的方式进行配置的,可以直接采用默认的方式cmake .就能直接进入配置,也可以自己指定配置,下面自己执行配置,修改一些常规的mysql配置。井号#后面是注释:
[root@localhost src]#cd mysql-5.6.36
[root@localhost mysql-5.6.36]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local//mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
这一步就是二进制安装了:
[root@localhost mysql-5.6.36]# make && make install
配置数据文件:
mysql安装完成之后需要安装文件,在mysql的安装目录下的scripts文件夹里可以看到mysql_install_db,用来安装mysql数据文件,指定mysql用户:
[root@localhost mysql]# ls /usr/local/mysql/scripts/
mysql_install_db
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
创建tmp目录:
MySQL安装完成后,在安装目录需要手动创建tmp文件夹,不然启动MySQL时会报错:
[root@localhost mysql]# mkdir tmp
将整个mysql安装目录归属改为mysql用户:
[root@localhost mysql]# chown -R mysql:mysql /usr/local/mysql
启动mysql:
初次启动MySQL之前先检查以下/etc目录下是否存在my.conf文件,如果有,将其删除,这个文件不是我们安装MySQL时产生的,MySQL会优先读取这个文件,如果不删除,启动会报错。
将mysql安装目录下的support-files文件夹中的my-default.cnf配置文件到/etc/my.cnf:
[root@localhost support-files]# rm -rf /etc/my.cnf
[root@localhost support-files]# cp my-default.cnf /etc/my.cnf
将mysql服务启动文件放在/etc/init.d/下:
[root@localhost support-files]# cp mysql.server /etc/init.d/mysqld
将/usr/local/mysql/bin/目录添加到环境变量中,vim编辑vim /etc/profile永久添加环境变量
[root@localhost mysql-5.6.36]# export PATH=$PATH:/usr/local/mysql/bin
[root@localhost mysql-5.6.36]# source /etc/profile
启动MySQL:
[root@localhost mysql]# /usr/local/mysql/support-files/mysql.server start
Starting MySQL.. SUCCESS!
登录mysql:
[root@localhost mysql]# /usr/local/mysql/bin/mysql -uroot
第一次登陆不需要密码,需要设置root登录密码:
[root@localhost mysql-5.6.36]# mysql> update user set password = password ( '123456' ) where user = 'root' ;
使用Navicat工具连接MySQL:
初次使用Navicat工具连接,会报“1130-host … is not allowed to connect to this MySql server,MySQL”,原因是MySQL中root用户只允许本地连接数据库,不允许远程连接。此时需要修改MYSQL数据库中的USER表,将root对应的localhost修改为%
[root@localhost ~]# mysql -uroot -p123456
mysql> use mysql;
Database changed
mysql> update user set host='%' where user='root' and host='localhost';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
再次尝试连接,输入连接名,主机,端口等信息,然后测试连接,提示“连接成功”点确定就行了:
注:
常见报错:
1、 ERROR 1044 (42000): Access denied for user ‘’@‘localhost’ to database ‘mysql’
2、 ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
[root@localhost ~]# mysql
MariaDB [(none)]> use mysql
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
MariaDB [(none)]> exit
原来是MySQL数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的’'@'localhost’可以看出来。因此只需要把user表中的匿名用户删除即可解决这个问题:
先编辑/etc/my.cnf,在[mysqld]块最后面加上skip-grant-tables,这样重启服务后登陆MySQL无需密码,保存退出。
再次连接MySQL,连接成功,在此删除匿名用户:
[root@localhost ~]# mysql
MariaDB [(none)]> use 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
MariaDB [mysql]> delete from user where user='';
Query OK, 2 rows affected (0.00 sec)
MariaDB [mysql]> update user set password=password("123456") where user="root";
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
MariaDB [mysql]> flush privileges;
mysql>flush privileges;
把第一步中my.cnf文件中加上的那一行去掉,再次重启服务即可。
[root@localhost ~]# vim /etc/my.cnf
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
Bye
3、10060 unknown error解决办法
出现这个报错基本是由于root用户的权限privileges导致,需要进行以下操作:
mysql> grant all privileges on *.* to 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
4、MySQL5.7以上修改root密码的方法:
Mysql5.7以后的版本,mysql.user表中密码字段不再是password,而是authentication_string,但authentication_string也不是密码,而是用户密码加密后的字符串,若需要修改root密码,则需要如下操作:
第一步,在/etc/my.cnf配置文件[mysqld]段内添加skip-grant-tables,然后重启mysqld服务,并直接使用mysql命令登录数据库:
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service
[root@mysql ~]# mysql
mysql>
第二步,将user表root用户的authentication_string字段置空
mysql>use mysql;
mysql>update user set authentication_string='' where user='root';
mysql>flush privileges;
第三步,把第一步/etc/my.cnf配置文件[mysqld]段内添加的skip-grant-tables注释掉,然后重启mysqld服务,使用root用户登录,上一步我们把root用户的authentication_string字段置空了,所以这次不需要密码就可以直接登录:
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service
[root@mysql ~]# mysql -uroot -p
Enter password: ###此处直接回车就可以
mysql> use mysql;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这时可以看到,系统要求我们必须先设置root密码,所以进行下一步,修改密码。
第四步,修改密码:
密码复杂度要求大写字母、小写字母、数字和特殊符号,不然会报错如下:
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '123456A,';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements;
正确应该是下面这个:
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '123456Aa,';
Query OK, 0 rows affected (0.01 sec)
至此,密码就修改好了!