centos安装使用mysql

105 阅读5分钟

MySQL 安装

可以用jumbo安装 安装mysql

也可以给机器安装一个root账号下的mysql:

(mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz)

下载官网:downloads.mysql.com/archives/co…

解压后:

mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

解压后没有data和mysql.sock

1、首先查询之前有没有装过低版本的MySQL 或 mariadb 或 Innodb

并停止mysql相关进程

例:

一、列出所有被安装的rpm package

rpm -qa | grep mariadb

二、强制卸载相关的软件

语句:rpm -e --nodeps 软件名

实例:rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64

2、检查mysql用户组和用户是否存在,如果没有,则创建

cat /etc/group | grep mysql

cat /etc/passwd |grep mysql

groupadd mysql

useradd -r -g mysql mysql

Linux useradd 命令用于建立用户帐号。
useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
语法
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]
或
useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]
参数说明:
-c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
-d<登入目录>  指定用户登入时的起始目录。
-D  变更预设值.
-e<有效期限>  指定帐号的有效期限。
-f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
-g<群组>  指定用户所属的群组。
-G<群组>  指定用户所属的附加群组。
-m  自动建立用户的登入目录。
-M  不要自动建立用户的登入目录。
-n  取消建立以用户名称为名的群组.
-r  建立系统帐号。
-s<shell>   指定用户登入后所使用的shell。
-u<uid>  指定用户ID。

3、移动解压完文件夹到 /usr/local/ 下,并将文件夹名称修改为mysql

如果 /usr/local/ 下已经存在mysql,请将已存在mysql文件修改为其他名称,否则后续步骤可能无法正确进行。

执行命令如下:
mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/

cd /usr/local/

mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql

如果 /usr/local/ 下不存在mysql文件夹,直接执行如下命令,也可达到上述效果。

mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql

4、在 /usr/local/mysql目录下创建data目录

mkdir /usr/local/mysql/data

5、更改mysql目录下所有的目录及文件夹所属的用户组和用户,以及权限

注意用什么用户登录的机器,就授权什么用户

chown -R work:work /usr/local/mysql

chmod -R 755 /usr/local/mysql

6、编译安装并初始化mysql

cd /usr/local/mysql/bin

这里一般网上会推荐用这个:

./mysqld --initialize --user=root --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql (需要记住临时密码)

但由于用户名、指定路径与/etc/my.cnf冲突 之类的问题,经常会出错,

例如:运行mysql.server start : Starting MySQL... ERROR! The server quit without updating PID file

这里推荐:

mysqld --initialize-insecure

之后登录直接用root和空密码登录

7、编辑配置文件my.cnf,添加配置如下

[mysqld]
# datadir=/var/lib/mysql
# socket=/var/lib/mysql/mysql.sock
# user=mysql
datadir=/usr/local/mysql/bin/data
basedir=/usr/local/mysql
socket=/usr/local/mysql/mysql.sock
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
# max_connections=600
# innodb_file_per_table=1
# lower_case_table_names=1
character_set_server=utf8
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#
# include all files from the config directory
#
# !includedir /etc/my.cnf.d
[client]
port=3306
socket=/usr/local/mysql/mysql.sock

可以参考:c.biancheng.net/view/7618.h…

其中:

lower_case_table_names:是否区分大小写,1表示存储时表名为小写,操作时不区分大小写;0表示区分大小写;不能动态设置,修改后,必须重启才能生效:
character_set_server:设置数据库默认字符集,如果不设置默认为latin1
innodb_file_per_table:是否将每个表的数据单独存储,1表示单独存储;0表示关闭独立表空间,可以通过查看数据目录,查看文件结构的区别;

8、测试启动mysql服务器

/usr/local/mysql/support-files/mysql.server start

容易出错:

Starting MySQL... ERROR! The server quit without updating PID file

可以查看在/etc/my.cnf中配置的日志来分析:

[mysqld_safe]

log-error=/var/log/mysqld.log

  • 可能报错:Can't create test file /usr/local/mysql/bin/data/xxx.lower-test

    • 一般出现这种就是data文件夹的问题,删除掉,重新初始化,命令行输入 mysqld --initialize-insecure
  • selinux 修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启或等待下次重启。

  • apparmor 在 /etc/apparmor.d/usr.sbin.mysqld 这个文件中,增加下面这两条

    • /data/mysql/ r, /data/mysql/** rwk, 重启apparmor,/etc/inid.d/apparmor restart
  • 权限问题 按第五条执行chown chmod命令

  • 多MySQL或其他db版本 mariadb 或 Innodb

  • skip-federated字段问题 检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段

9、添加软连接,并重启mysql服务

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

service mysql restart

10、

登录mysql,修改密码(密码为步骤5生成的临时密码)

mysql -u root -p
Enter password:空
mysql>set password for root@localhost = password('yourpass');

容易出错:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

出现问题原因:

有可能是 my.cnf 配置文件中设置了 [mysqld] 的参数 socket ,而没有设置[client]的参数socket

mysql.sock 文件有什么用:

mysql 支持 socket 和 TCP/IP 连接。那么 mysql.sock 这个文件有什么用呢?连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。/tmp 文件夹属于临时文件,随时可能被删除。

1.TCP 连接(如果报错 /tmp/mysql.sock,你可以尝试这种方式连接)

mysql -uroot -h 127.0.0.1 -p

2.socket 连接

mysql -uroot -p

解决方式:

添加 [client] 配置项

11、开放远程连接

mysql>use mysql;

msyql>update user set user.Host='%'where user.User='root';

mysql>flush privileges;

参考:www.cnblogs.com/lhn9527/p/1…