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;