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 执行MySQL的DDL数据定义语言。
依次执行下面的脚本,熟悉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>