linux之mysql安装

Posted 秋夜雨巷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之mysql安装相关的知识,希望对你有一定的参考价值。

下载Mysql

官网地址,点击download,找到Community

选择MySQL Community Server

选择平台和版本下载即可

安装mysql

查看安装文档

在下载页面上面有安装指南

选取指定的平台,查看安装步骤

进入到安装指南页面,warning大概翻译就是,如果之前安装过mysql,比如通过yum或者apt安装,那估计这次就很难装。

 Important翻译大概是,mysql依赖libaio这个library。如果没有安装,那么安装会失败。

删除自带的mariadb,卸载后/etc/my.cnf将不存在!!!初始化及启动要自己指定参数,不推荐卸载!!!

[root@localhost mysql]# rpm -qa|grep mariadb   #查找是否安装mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@localhost mysql]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64    #卸载mariadb
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave

解压创建软连接,改变文件所属用户及组(单独设data的所属用户名和组即可)

tar zxvf /path/to/mysql-VERSION-OS.tar.gz     #将tar压缩文件解压到当前文件夹
ln -s /usr/local/mysql_5.7.0 mysql    #把解压后的文件软连接mysql,软连接mysql文件在/usr/local下面,或者重命名也可以

groupadd mysql       #添加一个用户组
useradd -r -g mysql -s /bin/false mysql      #添加一个用户
cd /usr/local    #进入到文件夹
cd mysql    #进入到mysql,mysql为软连接
mkdir data     #新建一个data文件夹
chown mysql:mysql data    #data文件夹指定所属的用户和组,
chmod 750 data     #为这个文件赋予权限

#创建日志目录,mariadb里配置的文件,没有mariadb则不需要
mkdir /usr/local/mysql/logs 
chown -R mysql:mysql /usr/local/mysql/logs 
echo "" > /usr/local/mysql/logs/mysql.log
chown -R mysql:mysql /usr/local/mysql/logs/mysql.log
chmod 777 /usr/local/mysql/logs/mysql.log  #给日志写权限
[root
@localhost mysql]# chown -R mysql . #改变当前文件夹所属用户,可以不设,单独设data的所属也可以 [root@localhost mysql]# ll total 36 drwxr-xr-x 2 mysql root 4096 May 16 17:40 bin -rw-r--r-- 1 mysql 31415 17987 Mar 4 08:40 COPYING drwxr-x--- 5 mysql mysql 202 May 17 20:54 data drwxr-xr-x 2 mysql root 55 May 16 17:40 docs drwxr-xr-x 3 mysql root 4096 May 16 17:40 include drwxr-xr-x 5 mysql root 229 May 16 17:40 lib drwxr-xr-x 4 mysql root 30 May 16 17:40 man -rw-r--r-- 1 mysql 31415 2478 Mar 4 08:40 README drwxr-xr-x 28 mysql root 4096 May 16 17:40 share drwxr-xr-x 2 mysql root 90 May 16 17:40 support-files [root@localhost mysql]# chgrp -R mysql . #改变当前文件夹所属组 [root@localhost mysql]# ll total 36 drwxr-xr-x 2 mysql mysql 4096 May 16 17:40 bin -rw-r--r-- 1 mysql mysql 17987 Mar 4 08:40 COPYING drwxr-x--- 5 mysql mysql 202 May 17 20:54 data drwxr-xr-x 2 mysql mysql 55 May 16 17:40 docs drwxr-xr-x 3 mysql mysql 4096 May 16 17:40 include drwxr-xr-x 5 mysql mysql 229 May 16 17:40 lib drwxr-xr-x 4 mysql mysql 30 May 16 17:40 man -rw-r--r-- 1 mysql mysql 2478 Mar 4 08:40 README drwxr-xr-x 28 mysql mysql 4096 May 16 17:40 share drwxr-xr-x 2 mysql mysql 90 May 16 17:40 support-files

安装配置

模块

[client]: 所有mysql客户端程序读取的配置块,包括bin下面的很多工具,例如mysql、mysqladmin、mysqlcheck、mysqldump、mysqlimport、mysqlshow、mysqlslap。
[mysqldump]: 只有mysqldump这个客户端程序才会读取的配置文件。
[mysql]: 只有mysql这个客户端程序才会读取的配置块,即mysql命令行。
[server]: 所有服务端如mysqld会读取的配置块。 
[mysqld]: mysql服务端程序mysqld 和 mysqld_safe ,mysqld_multi 的配置文件。

配置,修改/etc/my.cnf文件,此文件作为初始化和启动时的参数,datadir默认为/var/lib/mysql,卸载mariadb后无此文件,需要自己添加。

[mysqld]
basedir=/usr/local/mysql   #指定basedir,启动时就不用指定basedir了
datadir=/usr/local/mysql/data   #/var/lib/mysql
socket=/usr/local/mysql/data/mysql.sock    #/var/lib/mysql/mysql.sock
port=3306
character_set_server=utf8
user=mysql

# 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

#客户端设置,即客户端默认的连接参数
[client]
#默认连接端口                
port = 3306
#用于本地连接的socket套接字,这个不同于上面mysqld中的socket,如果这个不写执行mysql -uroot -p会报错
socket = /usr/local/mysql/data/mysql.sock
#编码
default-character-set = utf8

[mysqld_safe]
log-error=/usr/local/mysql/logs/mysql.log    #log可以写在mysql新建的文件夹中,记得给mysql.log赋权限
pid-file=/usr/local/mysql/data/mysql.pid #创建新建的data文件夹中,原始为/var/run/mariadb/mariadb.pid

其他配置:

SQL Error (1055) sql_mode=only_full_group_by问题

安装命令

#初始化mysql,指定mysql的文件夹和data的文件夹,卸载mariadb后必须指定,basedir和basedata不指定默认用/etc/my.cnf文件里面的参数
./bin/mysqld --initialize --user=mysql  --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data &  
./bin/mysql_ssl_rsa_setup   
#启动mysql,卸载mariadb后必须指定,--user也可以写在配置文件里,相当于./bin/mysqld_safe --defaults-file=/etc/my.cnf
./bin/mysqld_safe --user=mysql &    
#将文件复制到服务中,具体看下面的将mysql设为服务
cp support-files/mysql.server /etc/init.d/mysql.server  

启动

有安装mariadb的话/etc/my.cnf文件中配置好的参数,实例化和启动可以不指定,没有/etc/my.cnf的话一定要指定.

执行启动语句后面加&是指在后台运行.

查看是否启动成功 ps -ef|grep mysql

 

更改密码

如果忘记临时密码把datadir目录下的文件删掉,重新初始化,一定要给logs/mysql.log写权限,不然密码写不进去,搜索password即可查看临时密码。

./bin/mysqld --initialize --user=mysql  --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data &

./bin/mysql -u root -p -h 127.0.0.1     #进入的mysql的root用户,输入密码,即刚才的临时密码

set password for \'root\'@\'localhost\' =password(\'123456\');      #更改新密码

 

通过修改mysql表,批量修改所有root用户名的密码(包括远程账号的root)

登录mysql系统,
mysql -uroot -p
Enter password: 【输入原来的密码】
mysql>use mysql;
mysql> update user set password=passworD("123456") where user=\'root\';
mysql> flush privileges;
mysql> exit;   

关闭 

没有安装为服务时,使用此方法关闭mysql。

/usr/local/mysql/bin/mysqladmin -u root -p shutdown   #输入密码后关闭成功

连接中的会显示

 

Mysql设置为服务

[root@localhost mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld      #复制启动脚本到资源目录
[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld   #增加mysqld服务控制脚本执行权限
[root@localhost mysql]# chkconfig --add mysqld    #将mysqld服务加入系统服务
[root@localhost mysql]# chkconfig --list mysqld    #检查mysqld服务是否生效

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use \'systemctl list-unit-files\'.
      To see services enabled on particular target use
      \'systemctl list-dependencies [target]\'.

mysqld             0:off    1:off    2:on    3:on    4:on    5:on    6:off

配置好后可以使用service命令控制mysql的启动和停止,命令为:service mysqld startservice mysqld stop

如果出现command not found是因为没有安装在目录/usr/local下面,更改配置文件vi /etc/init.d/mysqld指定安装的mysql目录及data目录即可

设置远程主机登录

./bin/mysql -u root -p      #进入的mysql的root用户,输入密码

GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\' IDENTIFIED BY \'root\' WITH GRANT OPTION;

配置全局环境变量

编辑/etc/profile文件

# vi /etc/profile

在profile文件底部添加如下两行配置,保存后退出

PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
export PATH

设置环境变量立即生效

# source /etc/profile

查看3306端口是否已开放

#linux查看端口
curl ***.***.***.***:3306
#windows查看端口
telnet ***.***.***.*** 3306

firewall-cmd方式(CentOS7)

#添加
firewall-cmd --zone=public --add-port=3306/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)

#重新载入
firewall-cmd --reload

#查看
firewall-cmd --zone=public --list-ports|grep 3306

iptables方式(CentOS6)

    # vi /etc/sysconfig/iptables 
    -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

    # service iptables restart

    Linux下开启/关闭防火墙命令
    #1) 永久性生效,重启后不会复原
    #开启: chkconfig iptables on
    #关闭: chkconfig iptables off

    #2) 即时生效,重启后复原
    #开启: service iptables start
    #关闭: service iptables stop

问题

1.初始化mysql时报错

解决方法:

查看mysql配置文件: vi /etc/my.cnf,如果卸载mariadb,则cd到初始化时指定的--datadir目录

找到mysql的datadir,进入datadir: cd /var/lib/mysql,

删除所有文件: rm -rf *。然后再初始化即可

2.通过用mariadb的/etc/my.cnf文件,启动时报错Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’

打开/etc/my.cnf,查看是否是socket=/var/lib/mysql/mysql.sock,不是则改为它。并在终端输入以下命令。

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

卸载mariadb无配置文件

Mysql5.6问题

配置好my.ini

初始化数据库

执行初始化操作前一定要安装模块

yum -y install autoconf

初始化操作

./script/mysql_install_db --user=mysql --basedir=/usr/local/mysql5.6 --datadir=/usr/local/mysql5.6/data --pid-file=/usr/local/mysql5.6/data/mysql.pid

启动

./support-files/mysql.server start

更改密码

和mysql5.7不同的是5.6密码为空,直接登录。

update user set authentication_string=password(\'123456\') where user=\'root\';

问题

Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql5.6/data/ecs-3-0924974.novalocal.pid).

先查询my.ini配置的err-log配置错误日志,查询相关问题。 

yum快捷安装

安装

yum install wget -y   #安装wget命令

#下载安装用的Yum Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm    

#安装mysql5.7的rmp
yum -y install mysql57-community-release-el7-10.noarch.rpm

#安装MySQL服务器
yum -y install mysql-community-server

会花些时间,安装完成后就会覆盖掉之前的mariadb

安装好后可以用ps -ef|grep mysql查看进程id,再用lsof -p PID查看mysql的所有相关文件.

安装报错

 卸载

yum -y remove mariadb-libs-1:5.5.35-3.el7.x86_64   ;yum删除ariadb-libs包,如果删除后依然卸载不到,用rpm卸载
rpm -e mariadb-libs-5.5.35-3.el7.x86_64    ;rpm删除ariadb-libs包

启动

systemctl start  mysqld.service    #启动mysql服务
systemctl status mysqld.service    #查看mysql服务

systemctl enable mysqld.service   #设置开机自启
systemctl disable mysqld.service   #关闭开机启动

启动报错

根据提示执行"systemctl status mysqld.service" 或"journalctl -xe"

可以看到[ERROR] --initialize specified but the data directory has files in it. Aborting.

查看/etc/my.cnf中配置的datadir的路径为/var/lib/mysql,进去清空即可,如果清空后又自动生成文件,需要先systemctl stop mysqld.service关掉mysql服务再删除,注意,这里的mysql后台服务是无法kill的。

清空后 再systemctl start mysqld.service启动mysql。

修改密码

#查看临时密码
grep "password" /var/log/mysqld.log

 

mysql -uroot -p    #进入数据库

#关闭密码规则和长度验证,否则会出现
#ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
set global validate_password_policy=0;
set global validate_password_length=1;

#修改密码
ALTER USER \'root\'@\'localhost\' IDENTIFIED BY \'root\';

如果是太久忘记密码可以使用免密登录,vi /etc/my.cnf,在[mysqld]下面添加

skip-grant-tables

重启服务器,即可无密码登录,登录进去后重置密码即可。

 

设置远程主机登录

#mysql -uroot -p登录后,设置远程主机登录,设置完成后quit推出mysql登录
GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\' IDENTIFIED BY \'root\' WITH GRANT OPTION;

#重启
systemctl restart mysqld.service

这时是不能通过远程访问的,要想远程访问,还要开放防火墙端口。

防火墙开放3306端口

用默认的端口会被一些安全扫描工具认为不安全,可以改为其他随机端口(不超过65535)。

#添加
firewall-cmd --zone=public --add-port=3306/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
#重新载入 firewall-cmd --reload #查看 firewall-cmd --zone=public --list-ports|grep 3306

卸载更新

因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉

yum -y remove mysql57-community-release-el7-10.noarch

配置文件

vi /etc/my.ini或者vi /etc/my.cnf

[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
#服务端存储数据的编码
character-set-server=utf8
#设置端口
port=3306
#允许最大连接数
max_connections=200
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

#MySql5.6.6弃用了explicit_defaults_for_timestamp这个系统变量,高于5.6.6时要设置此变量不然timestamp默认值会报错Invalid default value
explicit_defaults_for_timestamp=true
#mysql5.7对group by语法更严格了,只能select 分组的字段和聚合函数,其他字段不允许出现在select列中,如果不想线上报错需要写此语句
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

修改库位置

mysqladmin -u root -p variables | grep datadir    #查看数据库目录
# 修改mysql配置文件
vi /etc/my.cnf

修改datadir和socket

[mysqld]
#修改datadir和socket,并把/var/lib/mysql下面的文件拷贝过去
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

移动到/data/mysql下面后启动成功但是命令行连接失败,提示的依然是之前的路径。

 

mysql有tcp连接和socket连接方式,而这种错误一般是因为mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件,是一种socket连接方式。

解决办法

在/etc/my.cnf中添加如下配置

[client]
port=3300
socket=/data/mysql/mysql.sock

 

 

参考文章

参考文章

以上是关于linux之mysql安装的主要内容,如果未能解决你的问题,请参考以下文章

linux中怎么查看mysql数据库版本

Linux之MySQL

Linux之yum安装MySQL

linux之mysql安装

lnmp之mysql安装

Linux之linux下安装mysql