大数据技术和应用
上QQ阅读APP看书,第一时间看更新

2.5 实验二:在Linux中安装和使用MySQL

2.5.1 本实验目标

· 该实验运用数据库的基本理论,练习操作Linux基本的命令,动手操作包括MySQL软件的安装、部署和联调测试,动手操作MySQL大部分的脚本和命令,使得学生能够基本掌握数据库的知识和技能。

· 学习该课程后,到企业里可以从事的岗位有数据库运维工程师、数据仓库工程师、大数据开发工程师等。

2.5.2 本实验知识点

· 了解数据库的基础知识。

· 掌握安装MySQL的步骤和流程(以MySQL 5.6版本为例)。

· 掌握MySQL的配置功能。

· 动手实操MySQL的DDL语言。

· 实现几个创建用户的重要例子。

2.5.3 项目实施过程

步骤01 使用FTP工具上传文件

使用FileZilla工具,把MySQL的rpm安装包全部上传到服务器,进入“文件”→“站点管理器”→“新站点”,输入对应的IP地址、用户名和密码,如图2-23所示。

图2-23 站点管理器

把对应的软件上传到指定的目录中,如图2-24所示。

图2-24 把对应的软件上传到指定的目录中

步骤02 进入到远程环境

使用CRT工具,输入IP地址、用户名和密码,就可以到Linux操作系统的环境,结果如图2-25所示。

图2-25 CRT工具

步骤03 安装MySQL软件

进入Linux环境后,开始安装软件,运行下面的脚本:

#进入软件的目录
cd /home/mysql
#执行安装服务端的脚本
rpm -ivh MySQL-server-5.6.34-1.el6.x86_64.rpm
#执行安装客户端的脚本
rpm -ivh MySQL-client-5.6.34-1.el6.x86_64.rpm

安装的结果如图2-26所示。

图2-26 安装MySQL软件

步骤04 启动并登录MySQL数据库

没有启动MySQL数据库前,会报以下错误:

#连接MySQL报的错误
[root@localhost mysql]# mysql
ERROR 2002 (HY000): Can't connect to localMySQL server through socket
'/var/lib/mysql/mysql.sock' (2)

输入下面的命令,再输入密码“mysql”后回车(如果找不到登录密码,可以查看.mysql_secret文件,该文件记录着MySQL的初始化密码,执行“cat /root/.mysql_secret”),即可进入数据库,脚本如下:

连接MySQL:

#启动MySQL
/etc/init.d/mysql start
#登录到MySQL数据库
$mysql -u root -p

登录成功后的界面如图2-27所示。

图2-27 启动并登录MySQL数据库

步骤05 设置MySQL远程连接。

需要远程访问MySQL,则必须执行下面的步骤:

#查看MySQL的用户
mysql>select host,user,password from mysql.user where user='root';
#设置允许以地址访问
mysql>update mysql.user set host = '%' where user='root';
mysql>FLUSH PRIVILEGES;

设置启动3306端口,要启用3306端口有两种方式:一是让防火墙开放3306端口;二是关闭防火墙。推荐采用启用3306端口的方式:

#方法1:
iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
iptables  -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT
对应阻止3306端口的命令为:
iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP
iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP
#然后保存
/etc/rc.d/init.d/iptables save
#方法2:
#修改/etc/sysconfig/iptables文件,增加如下一行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j
ACCEPT
#然后重新启动防火墙:
#service iptables restart

关闭防火墙:

#方法1:
#对应的关闭防火墙的命令,重新启动后生效。
chkconfig iptables off


#方法2:
#即时生效,但重新启动后防火墙会再次启动。
service iptables stop

经过这几步的设置之后,就可以在远程连接MySQL。

步骤06 设置MySQL不区分字母大小写

Linux下的MySQL安装完之后,默认是区分表名的字母大小写的,而不区分列名的字母大小写。

改变表名的字母大小写区分规则的方法是:用root账号登录,在/etc/my.cnf或/etc/mysql/my.cnf中的[mysqld]后添加lower_case_table_names=1,重新启动MySQL服务,若设置成功,则不再区分表名的字母大小写。

注意

如果在/etc或/etc/mysql目录中找不到my.cnf ,就需要从其他地方复制过来,因为使用rpm安装MySQL时,需要手工复制my.cnf。

具体操作:

在/usr/share/mysql/目录中找到*.cnf文件,复制其中一个到/etc/中并更名为my.cnf。

命令如下:

#复制配置文件
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

my-small.cnf是为了小型数据库而设计的。

my-medium.cnf是为中等规模的数据库而设计的。

my-large.cnf是为专用于一个SQL数据库的计算机而设计的。

my-huge.cnf是为企业中的数据库而设计的。

复制完成后,进入到etc目录,执行vi my.cnf查看该文件:

#查看配置文件
vi /etc/my.cnf

按下“i”键进入编辑模式,找到[mysqld]后添加lower_case_table_names=1,并且将max_allowed_packet改为50M,修改后的结果如图2-28所示。

图2-28 修改max_allowed_packet的值

添加后按【Esc】键,输入“:wq”保存并退出,如图2-29所示。

图2-29 退出vim

最后重新启动MySQL服务即可,如图2-30所示。

图2-30 重新启动MySQL服务

步骤07 设置开机自启动

设置重新启动计算机同时自动启动MySQL之前,先执行下面的脚本:

#查看MySQL开机自启动设置
chkconfig --list |grep mysql
Mysql 0:off 1:off 2:on 3:on  4:on 5:on 6:off
这里的数字分别代表Linux启动的不同模式,3是命令行模式,5是窗口模式

执行下面的命令,启动计算机后,MySQL能自动启动服务:

#开机自启动命令
chkconfig mysql on
#再执行下面的脚本,确保是启动的状态
chkconfig --list |grep mysql

将MySQL添加到chkconfig里,执行下面的命令:

#启用开机自启动
chkconfig --add mysql
#再执行下面的脚本,确保是启动的状态
chkconfig --list |grep mysql

步骤08 执行MySQLDDL数据定义语言

依次执行下面的脚本,熟悉MySQL的定义语句的代码:

#查看已经存在的数据库
mysql>show database;
#使用MySQL数据库
mysql>use mysql
#查看MySQL数据库中的表
mysql> show tables;

实际数据库案例的命令例子:

#创建数据库
mysql> create database demo;
mysql> create database test;
#使用数据库
mysql> use demo;
Database changed
#创建一张名为t_demo的表,做测试用
CREATE TABLE test.t_demo ( id int,name varchar(100));
#创建一张名为products的表
CREATE TABLE demo.products (
product_no int,
product_name varchar(100)
);
#查看products表结构
mysql> desc products;
#为products表新增一列字段,名为price, numeric数值类型
ALTER TABLE products ADD COLUMN price numeric;
#将products表的product_no字段定义为主键
ALTER TABLE products ADD CONSTRAINT pk_products PRIMARY KEY(product_no);
#创建price字段的约束,要求其值必须大于0
ALTER TABLE products ADD CONSTRAINT positive_price CHECK (price > 0) ;

我们使用Navicat作为客户端连接MySQL,结果如图2-31所示。

图2-31 创建数据库

查看创建表的最终结果。双击test库,再双击“表”,可看到之前创建的products数据表。右键选择“对象信息”,然后点开DDL页,可看到之前步骤定义的表,对比以确认操作是否都生效了,如图2-32所示。

图2-32 查看DDL页

2.5.4 常见问题

问题1:创建存储过程时报错

错误信息:

    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS
SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe
log_bin_trust_function_creators variable)

原因分析:

这是因为开启了bin-log,这时必须确定我们的函数是否是:

· DETERMINISTIC:不确定的。

· NO SQL:没有SQL语句,当然也不会修改数据。

· READS SQL DATA:只是读取数据,当然也不会修改数据。

· MODIFIES SQL DATA:要修改数据。

· CONTAINS SQL:包含了SQL语句。

其中在function里面,只有DETERMINISTIC、NO SQL和READS SQL DATA被支持。如果开启了bin-log,就必须为function指定一个参数。

解决方法:

在my.cnf配置文件中添加“log_bin_trust_function_creators = 1”,如图2-33所示。修改my.cnf配置文件,修改mysql 5.5为默认编码。

图2-33 修改my.cnf配置文件

添加完成后重启MySQL服务即可。

问题2:ERROR 1045 (28000)错误

错误信息:

登录MySQL,输入密码的时候,出现下面的错误:

     ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

解决办法:

# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设置的密码newpassword>
mysql>