MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。 MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
Mysql是开源的,所以你不需要支付额外的费用,而且可以定制,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
MySQL使用标准的SQL数据语言形式;支持大型的数据库,可以处理拥有上千万条记录的大型数据库;可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
1.Linux版的Mysql安装
1.下载地址
官网下载地址:http://dev.mysql.com/downloads/mysql/


2.拷贝&解压缩
3.检查工作
1)检查当前系统是否安装过mysql
执行安装命令前,先执行查询命令
a)CentOS6
rpm -qa|grep mysql
如果存在mysql-libs的旧版本包如下:

请先执行卸载命令:
rpm -e --nodeps mysql-libs
b)CentOS7
rpm -qa|grep mariadb
如果存在如下:

请先执行卸载命令:
rpm -e --nodeps mariadb-libs
2)检查/tmp文件夹权限
由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限,执行 :
chmod -R 777 /tmp
4.安装
在mysql的安装文件目录下执行:
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
如果缺少安装所需的相关依赖,可以先使用 yum install 先行安装。
5.查看MySQL安装版本
可以执行 mysqladmin --version命令,类似java -version如果打出消息,即为成功。

6.mysql服务的启+停
1)启动:
service mysql start
2)关闭:
service mysql stop
7.首次登录及密码设置
安装完成后会提示出如下的提示:
- 在mysql首次登录前要给 root 账号设置密码

1)设置登录密码:启动服务后,执行命令
/usr/bin/mysqladmin -u root password ‘123123’

2)登录:
mysql -uroot -p123123

2.MySQL设置
2.1 MySQL的安装位置
在linux下查看安装目录
ps -ef|grep mysql

| 参数 | 路径 | 解释 | 备注 |
|---|---|---|---|
| –basedir | /usr/bin | 相关命令目录 | mysqladmin mysqldump等命令 |
| –datadir | /var/lib/mysql/ | mysql数据库文件的存放路径 | |
| –plugin-dir | /usr/lib64/mysql/plugin | mysql插件存放路径 | |
| –log-error | /var/lib/mysql/jack.atguigu.err | mysql错误日志路径 | |
| –pid-file | /var/lib/mysql/jack.atguigu.pid | 进程pid文件 | |
| –socket | /var/lib/mysql/mysql.sock | 本地连接时用的unix套接字文件 | |
| - | /usr/share/mysql | 配置文件目录 | mysql脚本及配置文件 |
| - | /etc/init.d/mysql | 服务启停相关脚本 |
2.2 设置开机自启动
chkconfig mysql on
chkconfig mysql --list

2.3 修改字符集问题
1.mysql可能会出现的乱码问题:
- 在mysql中尝试创建新表,并插入中文字符:

2.出现乱码的原因
- mysql的字符集存在问题
- 因为,默认的mysql服务器使用了latin1编码格式,所以会乱码
1)查看mysql的字符集设置
show variables like ‘character%’;
show variables like ‘%char%’;
看看出现的结果:

3.如何修改?
1)修改my-huge.cnf配置文件:
- 1)在mysql配置文件目录——/usr/share/mysql/ 中找到my-huge.cnf的配置文件
- 2)拷贝其中的my-huge.cnf 到 /etc/ 目录下并命名为my.cnf
- 3)然后修改my.cnf:在对应位置,添加如下内容
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8


2)重新启动mysql
service mysql restart
3)查看原库的字符集:
show create database mydb
4.注意:
原库的字符集设定不会发生变化,参数修改只对新建的数据库生效
那已生成的库表字符集如何变更?
1)修改数据库的字符集
mysql> alter database mydb character set ‘utf8’;
2)修改数据表的字符集
mysql> alter table mytbl convert to character set ‘utf8’;
但是原有的数据如果是用非’utf8’编码的话,数据本身不会发生改变。
2.4 sql_mode设置
1.什么是sql_mode?
MySQL的sql_mode合理设置:
- sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。
2.如何查看当前的sql_mode
show variables like ‘sql_mode’;

3.如何设置该值?
sql_mode常用值如下:
set sql_mode=‘ONLY_FULL_GROUP_BY’;

4.sql_mode又有那些值?
1)ONLY_FULL_GROUP_BY:
- 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
2)NO_AUTO_VALUE_ON_ZERO:
- 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
3)STRICT_TRANS_TABLES:
- 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
4)NO_ZERO_IN_DATE:
- 在严格模式下,不允许日期和月份为零
5)NO_ZERO_DATE:
- 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
6)ERROR_FOR_DIVISION_BY_ZERO:
- 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
7)NO_AUTO_CREATE_USER:
- 禁止GRANT创建密码为空的用户
8)NO_ENGINE_SUBSTITUTION:
- 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
9)PIPES_AS_CONCAT:
- 将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
10)ANSI_QUOTES:
- 启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
11)ORACLE:
- 设置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.
5.案例:
# 创建表并插入一些值
CREATE TABLE mytbl2 (id INT,NAME VARCHAR(200),age INT,dept INT);
INSERT INTO mytbl2 VALUES(1,'zhang3',33,101);
INSERT INTO mytbl2 VALUES(2,'li4',34,101);
INSERT INTO mytbl2 VALUES(3,'wang5',34,102);
INSERT INTO mytbl2 VALUES(4,'zhao6',34,102);
INSERT INTO mytbl2 VALUES(5,'tian7',36,102);
# 查询每个部门年龄最大的人
SELECT NAME,dept,MAX(age) FROM mytbl2 GROUP BY dept;
上面语句是错的:
- group by使用原则:select 后面只能放 函数 和group by后的字段
这篇博客详细介绍了在Linux系统中安装和配置MySQL的过程,包括下载与解压缩、检查系统状态、安装与依赖处理、设置开机自启动、解决字符集问题以及调整SQL Mode。此外,还涉及到MySQL的目录位置、首次登录密码设置、数据库字符集更改以及SQL Mode的严格模式设定,旨在帮助读者在Linux环境中顺利完成MySQL的高级安装和优化。

被折叠的 条评论
为什么被折叠?



