1、Mysql下载
1、把下载的安装包移动到/usr/local/下,解压。
# tar zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
2、修改解压后的文件夹名称
# mv ./mysql-5.6.33-linux-glibc2.5-x86_64 ./mysql
2、Mysql配置
1、添加系统mysql组和mysql用户
# groupadd mysql
# useradd -r -g mysql mysql //useradd -r参数表示mysql用户是系统用户,不可用于登录系统。
2、更改所属的组和用户
进入mysql文件夹,也就是mysql所在的目录。
[root@localhost local]# cd mysql
[root@localhost mysql]# chown -R mysql:mysql ./
3、执行mysql_install_db脚本
对mysql中的data目录进行初始化并创建一些系统表格。注意mysql服务进程mysqld运行时会访问data目录,所以必须由启动mysqld进程的用户(就是我们之前设置的mysql用户)执行这个脚本,或者用root执行,但是加上参数:--user=mysql。
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql
*注意:如果mysql的安装目录(解压目录)不是/usr/local/mysql,那么还必须指定目录参数,如
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
该命令行中的–user=mysql表示运行mysql数据库时所使用的用户,
–basedir=/usr/local/mysql表示mysql数据库说安装的位置,
–datadir=/usr/local/mysql/data表示mysql数据库的数据文件存储的位置。
*错误1:Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决办法:yum install -y libaio
*错误2:(待确定)
若/etc/my.cnf 已存在,可以在删除其后再重新执行以上命令,不然会在后面启动mysql是报:Starting MySQL... ERROR! The server quit without updating PID file (/usr/local/mysql/data/host.localdomain.pid).
4、更改文件权限
将mysql/目录下除了data/目录的所有文件,改回root用户所有,mysql用户只需作为mysql/data/目录下所有文件的所有者。
[root@localhost mysql]# chown -R root:root ./
[root@localhost mysql]# chown -R mysql:mysql ./data
5、配置my.cnf与mysql开机启动
数据库初始化完毕后,我们还有两个工作要做。
一是配置mysql的配置文件my.cnf。
[root@localhost mysql]# cp my-default.cnf /etc/my.cnf
低版本my-default.cnf 名称可能为my-medium.cnf
my.cnf文件
log-bin = /var/lib/mysql/mysql-bin #记录数据库操作日志(delete等),可实现增量恢复数据
expire_logs_days = 30 #定义binlog自动删除时间(若数据重要,建议不开启)
basedir=/usr/local/mysql # 使用给定目录作为根目录(安装目录)
datadir=/usr/local/mysql/data # 设置mysql数据库的数据的存放目录
port = 3306 #设置3306端口
server_id = 1 #给服务器分配一个唯一的ID编号(范围1~2的32次方)
socket = /var/lib/mysql/mysql.sock #为客户程序与服务器间本地通信指定一个套接字文件
character-set-server=utf8 # 数据表默认字符集(默认为latin1)
max_connections=200 # 允许最大连接数(默认是151,可不配置)
二是配置mysql启动文件。
首先将support-files /mysql.server服务脚本复制到/etc/init.d/,并重命名为mysqld。
[root@localhost mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld
也可能是:cp support-files/mysql.server /etc/rc.d/init.d/mysqld
6、启动mysqld服务。
[root@localhost mysql]# service mysqld start
若需要将mysqld服务加入开机自启动项。可通过chkconfig命令将mysqld服务加入到自启动服务项中。
[root@localhost mysql]# chkconfig --add mysqld
*注意服务名称mysqld就是我们将mysql.server复制到/etc/init.d/时重命名的名称。
*查看是否添加成功
[root@localhost mysql]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
正常提示信息:Starting MySQL. SUCCESS!
最后将mysql客户端放到默认路径,就可以linux下登录了
# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql
这是由于/etc/init.d/mysqld 没有配置basedir= 和datadir= 路径
通过使用 mysql -u root -p 连接数据库(默认数据库的root用户没有密码,需要设置一个密码)。这里任务算是完成,之后就可以创建数据库用户,然后使用数据库了。
错误信息:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解决方法:打开/etc/my.cnf,看看里面配置的socket位置是什么目录。“socket=/var/lib/mysql/mysql.sock”
路径和“/tmp/mysql.sock”不一致。建立一个软连接:
# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
7、权限控制去除匿名用户
# 测试匿名用户登录
# mysql -u root
可以看到匿名用户可以登录,具有information_schema和test库的相关权限。
# 删除匿名用户,使用root用户登录数据库
mysql>delete from mysql.user where User='';
mysql>flush privileges;
再次测试匿名用户登录
8、修改mysql的root用户密码,root初始密码为空的:
# ./bin/mysqladmin -u root password '密码'
9、其它
9.1、查看mysql配置是否配置成功,编辑my.cnf,指定mysql安装路径和mysql数据文件存放路径,下图还配置了bin-log,配置bin-log的同时需要指定server_id
9.2、到此我们mysql的配置文件就整理完了,可以通过开启bin-log,重启mysql,查看配置是否生效,如果生效那么,以上配置成功。
如果修改my.cnf后启动不了,可以通过如下方式查看错误信息
# mysqld --verbose --help |grep -A
9.3、使用数据库工具连接时报1130错误:由于没有给远程连接的用户权限问题
方法一:更改‘mysql’数据库‘user’表‘host’项,从‘localhost’改成‘%’
mysql -u root -p //进入mysql控制台
mysql>use mysql;
mysql>update user set host = '%' where user = 'root'; //这个命令执行错误时可略过
mysql>flush privileges;
mysql>select host, user from user; //检查‘%’ 是否插入到数据库中
mysql>quit
注:若以上还不行,可按以下检查
检查默认端口:show global variables like 'port';
再检查进程实际监听地址:netstat -nlp|grep 3306
若显示为127.0.0.1:3306则说明mysqlbind-address设置为bind-address=127.0.0.1,可以简单理解为目前,仅服务器所在机器可以访问到这个mysql(127.0.0.1为本机回环地址,一般为进程间通信时利用,该地址仅允许本机访问)
解决方法为:
修改/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/mysql/my.conf路径下的bind-address参数
将其中的bind-address=127.0.0.1
改为bind-address=0.0.0.0
,再重启mysql服务/etc/init.d/mysql restart
方法二:直接授权
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;
9.4、中文乱码无法插入ERROR 1366 (HY000): Incorrect string value:
进入数据库输入命令mysql>show variables like '%char%'
在/etc/my.cnf中添加character-set-server=utf8
再测试插入汉字试试,注意新建表的字段时字符集选择utf8.
3、Root密码重置
1、编辑/etc/my.cnf
在[mysqld] 配置部分添加一行
skip-grant-tables
2、保存后重启mysql
[root@localhost etc]# service mysqld restart
Shutting down MySQL. [ OK ]
Starting MySQL. [ OK ]
3、登录数据库重新设置root密码
[root@localhost ~]# mysql -u root -p mysql
Enter password:
直接回车进入
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.47-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
执行下列语句
mysql> update user set password=password("mysql") where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4、删除/etc/my.cnf文件中添加的“skip-grant-tables”行,重启mysql;
用新设的密码就能正常登录了;
4、my.cnf配置详解