一) 下载免安装包:
mysql下载地址: https://dev.mysql.com/downloads/mysql/
下载时,选择以前5.7版本:
下载第一个TAR压缩包:
二) 定义安装路径并解压安装包
1、假设需要把MySQL放到 /usr/local/qhs/mysql5.7 目录下运行, 则手工创建目录 /usr/local/qhs/mysql5.7, 下文把此目录称为【安装目录】
2、上传压缩包到 【安装目录】 下; 执行 如下命令
[root@localhost~]# tar -xzvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
会在目录下解压出 mysql-5.7.35-linux-glibc2.12-x86_64 目录,该目录即为mysql的运行目录,此目录下有 bin 等mysql目录;
三)创建系统mysql组和mysql用户
检查mysql组和用户是否存在,如无则创建
[root@localhost~]# cat /etc/group | grep mysql
[root@localhost~]# cat /etc/passwd | grep mysql
若不存在,则创建如下:
# 创建mysql用户组
[root@localhost~]# groupadd mysql
# 创建一个用户名为mysql的用户,并加入mysql用户组
[root@localhost~]# useradd -g mysql mysql
# 制定password 为mysql
[root@localhost~]# passwd mysql
Changing password for user mysql.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
四)更改【安装目录】所属的组和用户
cd /usr/local/qhs/
# 更改所属的组和用户
[root@localhost local]# chown -R mysql mysql5.7/
[root@localhost local]# chgrp -R mysql mysql5.7/
五)创建mysql的数据目录和日志目录
# 创建数据和日志存储目录(目录可以随意指定,但必须存在,这两个目录在下一步中会使用,这两个目录的所有者必须是mysql用户)
[root@localhost mysql5.7]# cd /usr/local/qhs/mysql5.7/
[root@localhost mysql]# mkdir data
[root@localhost mysql]# mkdir logs
# 修改所有者
[root@localhost mysql]# chown -R mysql:mysql data
六)定义mysql的 my.cnf 文件
此文件是mysql的运行定义文件,需要根据实际情况修改,然后放置到指定目录下,一般情况下,如果不特别说明(比如系统中只有一个MySQL),就放在 /etc 目录下;如果系统需要装多个mysql,那么每个MySQL对应的 my.cnf 文件就需要放在各自配置的目录下:
创建 my.cnf文件
my.cnf内容如下:
[mysqld] #下面语句的作用主要是当前本机登录不需要密码,可以注释掉 skip-grant-tables #mysql安装目录,也就是 mysql的 bin 的父目录 basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ #mysql数据库目录,也就是上面步骤创建的data目录,必须存在 datadir=/usr/local/qhs/mysql5.7/data #mysql数据库监听端口,可以按需修改,不同mysql开启不同的端口 port = 3307 character_set_server=utf8 max_allowed_packet = 512M innodb_log_file_size = 2048M [mysqld_safe] #错误日志,也就是上面步骤创建的data目录下的一个文件,此文件可以不存在 log-error=/usr/local/qhs/mysql5.7/data/error.log #pid文件,此配置项有的说不需要,反正我配置上是没有问题的,data目录必须存在 pid-file=/usr/local/qhs/mysql5.7/data/mysqld.pid #临时目录可以不存在,只要指定就好 tmpdir=/tmp/mysql5.7 # # include all files from the config directory # #!includedir /etc/my.cnf.d ## 不建议开日志,所有的操作都记录文件太大 # general-log=1 # log-output=FILE # general-log-file=/data_disk/mysql/logs/mysql.log slow_query_log=1 long_query_time=3 slow_query_log_file=/data_disk/mysql/logs/slowquery.log # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB lower_case_table_names=1 max_allowed_packet=16M
场景一: 系统只有一个MySQL,放在默认目录 /etc/ 下(强烈建议按照场景二配置,因为我是用的场景二,主要是不知道当修改了data目录后,是否需要按照场景二去修改support-files文件里的内容):
# 进入/etc文件夹下 [root@localhost mysql]# cd /etc # 编辑my.cnf [root@localhost etc]# vim my.cnf
场景二: 系统有多个MySQL,放在各自配置目录下,例如本例放在 /usr/local/mysql5.7/ mysql-5.7.35-linux-glibc2.12-x86_64/目录下(建议放到my.cnf的basedir 目录下,以免有各种问题):
放在目录下之后,还需要配置如下,进入mysql运行目录的support-files文件夹(与bin同级), 编辑mysql.server文件
#和上面 my.cnf 的配置一样,是mysql的运行目录 basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ #和上面 my.cnf 的配置一样,是mysql的data目录 datadir=/usr/local/qhs/mysql5.7/data/ #没搞清楚,我是原样使用,反正配置时没有这个文件 lockdir='/var/lock/subsys5.7' #没搞清楚,我是原样使用,反正配置时没有这个文件 lock_file_path="$lockdir/mysql5.7" #没搞清楚,我是原样使用,也就是data目录加一个pid文件,此文件运行时生成 mysqld_pid_file_path=/usr/local/mysql5.7/data/mysqld.pid #!!! (非常重要) 搜索conf后再修改,这个在else语句里面, 这里的值就是当前MySQL的 my.cnf 文件所在位置(非常重要) !!! conf=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf
七) 初始化mysql
[root@localhost mysql] /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysqld --initialize-insecure --datadir=/usr/local/qhs/mysql5.7/data/ --basedir=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/ --user=mysql
八)安全模式启动mysql
通过mysqld_safe启动
[root@localhost mysql]# /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysqld_safe --defaults-file=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf --skip-grant-tables --skip-networking &
#添加--skip-networking参数,让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。
启动后,通过另外一个SSH命令窗口执行如下步骤
九)修改root密码,授权root远程连接
如下修改后,可通过执行 /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/mysql -uroot -p 来验证密码
[root@localhost mysql]# /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64//bin/mysql
>mysql> flush privileges;
>mysql> update mysql.user set authentication_string=password('Abcd123456') where host='localhost' and user='root';
>mysql> grant all privileges on *.* to 'root'@'%' identified by 'Abcd123456';
>mysql> flush privileges;
>mysql> exit
八) 把mysql启动做成服务
复制该mysql.server文件到/etc/init.d并重命名为mysql5.7(可按自己需要命名)
[root@localhost mysql] cp -i /usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysql5.7
九) 启动/停止服务
[root@localhost mysql] service mysql5.7 {start|stop|restart|reload|force-reload|status}
#启动时,如果抛错,可以到error日志中查看。
# 1---比如出现ERROR! The server quit without updating PID file /usr/local/develop/db/mysql5.7/data/mysqld.pid). 就说明进程起不来,而日志中提示
#[ERROR] Could not create unix socket lock file /var/lib/mysql/mysql.sock.lock.
#则需要手工创建文件夹/var/lib/mysql/ 并执行 chown -R mysql:mysql /var/lib/mysql/ 给它赋权;
#还有可能出现自定义的 my.cnf 被忽略的提示,这是因为 my.cnf 的权限不能是777 而应该是644,否则mysql会取默认的 /etc/ 下面的my.cnf
十)重启电脑
十一)启动mysql
把 my.cnf 文件中的 skip-grant-tables 注释掉
service mysql5.7 start|
十二)阿里云的注意事项
如果是阿里云上安装的mysql,还需要在实例的安全组属性中,添加3306(或对应端口)端口打开规则
点击ECS实例名称,进入ECS详情页面,在页面上可以查看该ECS的各种属性,其中就有一项是 安全组属性(千万不能直接用左边导航菜单的安全组,那个和当前ECS实例没有任何关系,配置了也没用)
FAQ: 启动失败一般是对应的日志文件不存在,或者目录没有权限。
如果服务注册失败,可以通过如下命令直接启动
mysqld --defaults-file=/usr/local/qhs/mysql5.7/mysql-5.7.35-linux-glibc2.12-x86_64/my.cnf --user=root &
若启动时候抛异常: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
则需要建立软连接:ln -s /usr/local/qhs/mysql5.7/mysql.sock /tmp/mysql.sock