mysql5.6 linux下安装笔记

由于现在要用mysql,以前一直用oracle ,现在下个mysql都要翻墙下载,官方网站都下不了,选择之后都是windows版本。

最后找了个外国网站:http://fossies.org/linux/misc/mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz/ 下载了最新版本的:mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz

查看当前centos版本和内核,位数。

[root@localhost ~]#  cat /etc/redhat-release --/etc/redhat-release配置文件用一行内容来声明 Red Hat 的名称和版本号。 由 rc.local 使用.
CentOS release 6.5 (Final)  -- 发现我的是6.5版本。
[root@localhost ~]# cat /proc/version   --64位系统
Linux version 2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

一、把mysql压缩包上传到/usr/mysql 目录下面。安装目录选择/usr/local/mysql。

然后在网上找一篇安装mysql的文章,最后参考了http://blog.csdn.net/zhanngle/article/details/41042631

-------------------------------------------

1.解压tar包


cd /software

tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz  -- 更改对应的包名mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21  --更改对应的安装目录/usr/local/mysql

2.添加用户与组


groupadd mysql

useradd -r -g mysql mysql

chown -R mysql:mysql mysql-5.6.21

3.安装数据库


su mysql

cd mysql-5.6.21/scripts

./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data

(新的:./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data)

exit

这里可能会报错:scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory。

需要安装perl以及perl-devel.执行命令:yum –y install perl perl-devel

如果mysql数据路径目前不是/usr/local/mysql/data,默认启动会报下面的错误

starting MySQL...The server quit without updating PID file [FAILED]cal/mysql/data/iZwz93nu0s9j3y9zwzy

解决方法:在/etc/my.cnf配置文件里面,设置这一行:datadir = /other/data

配置好后重新启动mysql

4.配置文件


cd /software/mysql-5.6.21/support-files

cp my-default.cnf /etc/my.cnf

cp mysql.server /etc/init.d/mysql

vim /etc/init.d/mysql          #若mysql的安装目录是/usr/local/mysql,则可省略此步

修改文件中的两个变更值

basedir=/software/mysql-5.6.21
datadir=/software/mysql-5.6.21/data

5.配置环境变量


vim /etc/profile

export MYSQL_HOME="/software/mysql-5.6.21"

export PATH="$PATH:$MYSQL_HOME/bin"

保存退出

. /etc/profile

6.添加自启动服务


chkconfig --add mysql

chkconfig mysql on

7.启动mysql


service mysql start

8.登录mysql及改密码与配置远程访问


mysqladmin -u root password 'your_password'     #修改root用户密码,如果有问题mysqladmin: connect to server at 'localhost' failed -- http://blog.csdn.net/zl17/article/details/8589454

进入mysql命令行之后修改root密码:

set password for root@localhost = password('123456');    -- 123456为新密码

 mysql -uroot -p  --default-character-set=utf8     #登录mysql,需要输入密码

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;     #允许root用户远程访问

mysql>FLUSH PRIVILEGES;     #刷新权限

mysql>exit

9、Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;
用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;
lower_case_table_names参数详解:
lower_case_table_names=0
其中0:区分大小写,1:不区分大小写

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
MySQL在Windows下都不区分大小写。

10、修改默认字符集

默认情况下,mysql是不支持中文字符的。因为其默认的字符集latin1,我们可以通过修改其配置文件,来更改默认的字符集设置。默认情况下的字符集如下:

mysql> SHOW VARIABLES LIKE '%char%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | latin1                     |

| character_set_connection | latin1                     |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | latin1                     |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

设置字符集为UTF-8, 编辑配置文件/etc/my.cnf, 在[mysqld]下添加如下一行:default-character-set=utf8

http://skypegnu1.blog.51cto.com/8991766/1421777/      -- 发现有问题需要再验证一下

---------------------------2014/11/25 添加

又装了一次此版本的mysql,发现root用户不能登录,提示没权限。使用mysqld_safe 登进去,发现user表居然是空的,没有一个用户,郁闷。

于是从其它地方导出了一份user表的sql语句,手动插入了一个用户,再登录就可以了。

附:

忘记root密码后,如何找回密码

cd $MYSQL_HOME

./bin/mysqld_safe --basedir=/data/mysql-5.6.21 --datadir=/data/mysql-5.6.21/data --skip-grant-tables &
mysql -u root mysql
UPDATE user SET password=PASSWORD("new_password") WHERE user='root';
FLUSH PRIVILEGES;

二、按上面的文章安装完之后

1、查询当前安装的mysql版本

查看mysql是否启动:service mysqld status 

[root@localhost ~]# mysql -V
mysql  Ver 14.14 Distrib 5.6.25, for linux-glibc2.5 (x86_64) using  EditLine wrapper

进入mysql、查看mysql版本
方法一:status;
方法二:select version();

2、Mysql启动、停止、重启常用命令
a、启动方式
1、使用 service 启动:
[root@localhost /]# service mysqld start (5.0版本是mysqld)
[root@szxdb etc]#
service mysql start (5.5.7版本是mysql)

2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:
safe_mysqld&

b、停止
1、使用 service 启动:
service mysqld stop

2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld stop

3、mysqladmin shutdown

c、重启
1、使用 service 启动:
service mysqld restart 
service mysql restart (5.5.7版本命令)

2、使用 mysqld 脚本启动:
/etc/init.d/mysqld restart

三、赋予权限

登录: mysql -uroot -p  --default-character-set=utf8

(1)、创建用户:

create user 'myuser'@'localhost' IDENTIFIED by '123456';

flush privileges;

(2)、创建数据库:

create database mydb;

flush privileges;

(3)、给用户授权数据库相关权限

grant all privileges on mydb.* to myuser@localhost identified by '123456';

flush privileges;

我用到的权限命令,简单说明,mydb为数据库实例名,myuser为用户名,后面对某个ip作对应的权限控制。 
grant 为赋予权限,revoke为撤销权限,赋予权限完之后要用flush privileges; 来刷新生效。

1、grant all on mydb.* to 'myuser'@'192.168.1.6'identified by '123456';
2、grant select on mydb.* to 'myuser'@'192.168.1.%' identified by '123456';

 所有ip都可以访问:grant select on mydb.* to 'myuser'@'%' identified by '123456';
3、revoke all on mydb.*
from 'myuser'@'192.168.1.6' ;

grant all on mydb.* to 'myuser'@'localhost' identified by '123456';

授权之后,启动应用。今天恢复数据库之后发现一个问题,系统一直报错:

java.sql.SQLException: Access denied for user 'myuser'@'127.0.0.1' (using password: YES)

还要配置一个127.0.0.1的。

grant all on mydb.* to 'myuser'@'127.0.0.1' identified by '123456';

查看用户权限
show grants for 你的用户
比如:
show grants for root@’localhost’;

show grants for  'myuser'@'192.168.1.1';

查看数据库所有用户
mysql> use mysql;
Database changed
mysql> select user,host from user;

删除用户   mysql> DROP USER 'myName'@'localhost';

     具体参考:http://www.cnblogs.com/llsun/archive/2013/08/06/3240963.html

四、导入数据问题解决

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...

1.执行批量的MYSQL语句,例如备份恢复的时候,时间过长; 或者SQL语句过大或者语句中含有BLOB类似字段--我的是BLOB字段存放文件导致过大引起
对应:修改my.cnf中的wait_timeout和interactive_timeout变量 
在一些不便修改的情形下,如租用的空间,可以采取sql语句修改,如何做呢? 

(1)、如果是租用空间,无法修改数据库参数,那么临时mysql语句设置,不过下次重新导入必须再设置:
#对当前交互链接有效;  
mysql>set wait_timeout = someIntValue;  
#对后续起的交互链接有效;  
mysql>set interactive_timeout = someIntValue;  
mysql>set global max_allowed_packet=1000000000;  -- 设置针对BLOB字段过大导入引起的问题


(2)、如果是自己的服务器,那么找到my.ini(windows下my.ini)文件,linux发现是/usr/local/mysql下的my.cnf文件。

经测试恢复数据库的时候报:ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER  privilege(s) for this operation
也是由于max_allowed_packet 设置太小引起,可以改到600M,重启mysql,重新导入就不报这个问题了,参考网上发现授权也不能解决这个问题,后面还是修改这个参数值来解决。

添加一句max_allowed_packet=16M,如果不行将16M再加大
加大wait_timeout也可起一定作用
eg:
wait_timeout=2880000
interactive_timeout = 2880000
max_allowed_packet = 600M

应用时记住重启数据库哦~~
除此之外,可能还有一些别的buffer_size的变量会影响到,也值得注意 
例如 
read_buffer_size 
read_rnd_buffer_size

重启后查询

mysql> show variables like '%timeout';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         |
2880000  |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 3600     |
| wait_timeout                |
2880000  |
+-----------------------------+----------+
12 rows in set (0.00 sec)

mysql> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 104857600  |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)

五、安装完之后访问参考

http://blog.csdn.net/cuker919/article/details/44997923

六、启动应用

启动应用访问发现应用日志连接池报:java.sql.SQLException: Access denied for user 'myuser'@'localhost' (using password: YES)

同时切换到linux,用该用户试试:

[root@localhost ]# mysql -u myuser-p
Enter password:
ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password:

但发现mysql workbench用该用户访问一切正常,因为我是用mysql workbench创建的用户,但到linux又登录不了。

下面是试错的过程,但既然后面可以登录了

(1)、修改密码

[root@localhost ]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 614
Server version: 5.6.25 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql  --切换数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup
with -A

Database changed  
mysql> update user set password=password("123456") where user="root";  --更改root用户密码
Query OK, 3 rows affected (0.00 sec)
Rows matched: 5  Changed: 3  Warnings: 0

mysql> update user set password=password("123456") where user="myuser"; --更改myuser用户密码
Query OK, 4 rows affected (0.00 sec)
Rows matched: 5  Changed: 4  Warnings: 0

发现用这个命令修改密码提示:ERROR 1146 (42S02): Table 'mydb.user' doesn't exist

参考:http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html

update mysql.user set password=password('新密码') where User="test" and Host="localhost";  -- 最后这样更改才ok

mysql> exit  --退出

(2)、再登录,还是报错

[root@localhost logs]# mysql -u myuser-p
Enter password:
ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: 

(3)、再试错。

[root@localhost ]# /etc/init.d/mysql stop  --停止服务
Shutting down MySQL..... SUCCESS!
[root@localhost ]# /usr/bin/mysqld_safe --skip-grant-tables
-bash: /usr/bin/mysqld_safe: No such file or directory
[root@localhost ]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
[1] 1791
[root@localhost ]# 150613 11:20:01 mysqld_safe Logging to '/usr/local/mysql/                                                                                                                               data/localhost.localdomain.err'.
150613 11:20:02 mysqld_safe Starting mysqld daemon with databases from /usr/loca                                                                                                                               l/mysql/data
^C  --按ctrl + c 退出
[root@localhost ]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking
150613 11:21:27 mysqld_safe Logging to '/usr/local/mysql/data/localhost.localdom                                                                                                                               ain.err'.
150613 11:21:27 mysqld_safe A mysqld process already exists
[root@localhost ]# /etc/rc.d/init.d/mysql restart  --启动服务

[root@localhost ]# mysql -u myuser-p  -- 再登录,既然可以了,然后应用也可以登录

(4)、总结

先登录 mysql

# mysql -u root -p

mysql> use mysql   --切换

mysql> select host,user,Password from user;  --查看用户和密码情况,其实从这里就可以发现问题,不行就往下

# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root -p
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysqld restart
# mysql -u myuser -p

参考:http://www.bxl.me/zh-cn/2567.html  
http://blog.csdn.net/lyflower/article/details/6137021 
http://blog.csdn.net/vurtne_ye/article/details/26514499

七、mysql查看所有存储过程,函数,视图,触发器,表

方法一:
       select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'   //存储过程
       select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION'   //函数

方法二:
         show procedure status; //存储过程
        show function status;     //函数

查看存储过程或函数的创建代码
show create procedure proc_name;
show create function func_name;

查看视图
SELECT * from information_schema.VIEWS   //视图
SELECT * from information_schema.TABLES   //表

查看触发器
方法一:
语法:SHOW TRIGGERS [FROM db_name] [LIKE expr]
实例:SHOW TRIGGERS\G     //触发器

方法二:
对INFORMATION_SCHEMA数据库中的TRIGGERS表查询
mysql>SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G

八、数据库字符集和乱码解决

mysql utf8_mysql charset=utf8你真的弄明白意思了吗_ZJUAllen的博客-CSDN博客

MySQL Charset--UTF8和UTF8MB4对比测试 - TeyGao - 博客园 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值