普通用户无法运行yum安装mysql数据库,只能下载已编译好的二进制版本手动初始化建库,配置特定端口使用。
这里以 5.6.39版本为例)
- 下载prebuilt 的bin版本(或从源码编译)
下载 http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
这里的具体版本5.6.39请到http://mirrors.sohu.com/mysql/MySQL-5.6/下查看,可能会有小版本的更新。
- 解压到一个目录:
tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
会创建一个子目录mysql-5.6.39-linux-glibc2.12-x86_64,进入这个目录ls,下面是他包含的子目录:
bin docs include lib man mysql-test scripts share sql-bench support-files
- 在此目录下建一个数据目录 udata 执行mysql_install_db命令初始化数据库:
mkdir udata
support-files目录下有一个 my-defaults.cnf的文件,拷贝到上级目录中改名为my.cnf,并修改文件的内容,主要修改 base_dir、 data_dir、 port、 bind-address四项:
base_dir 配置为 解压后得到的目录
data_dir 配置为 刚建的存放数据的目录
port 按初始规划的端口配置,不配置的话,取缺省为 3306
bind-address 缺省为127.0.0.1 ,建议配置成本机IP,如果不配置,只能本机连接,一般外网无法连接。
例如:
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
basedir = /opt/mysql
datadir = /opt/mysql/adata
port = 33306
# server_id = .....
# socket = .....
bind-address = 192.168.1.5
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
lower_case_table_names = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
配置完后,执行:
scripts/mysql_install_db --defaults-file=./my.cnf
会初始化数据库。
5.7版后 bin/mysqld --defaults-file=my.cnf --initialize 记下随机生成的密码
上面数据库初始化后还没启动,使用下面的命令可启动数据库。
- 使用 bin/mysqld_safe --defaults-file=./my.cnf & 启动
5.7版后: bin/mysqld --defaults-file=my.cnf &启动
5.6版mysql初始数据库的初始密码还没设,用下面命令设初始密码:
bin/mysqladmin --defaults-file=my.cnf -P 33306 -u root password "xxxx"
该命令设定本地连接的root用户的密码(xxxx是用户设定的密码)。
bin/mysqladmin --defaults-file=my.cnf -P 33306 -h yyyy -u root password "xxxx"
该命令设定远程连接的root用户的密码(yyyy是mysql服务器的hostname或IP地址,xxxx是用户设定的密码)。
执行mysql提供参数进入的是mysql数据库的console,例如下面命令要求用root用户进入console,-p表示需要输入密码:
bin/mysql --defaults-file=my.cnf -P 33306 -u root -p
mysql一个用户不同连接方式可以有不同的密码,可以用 create user ‘aaa’@’bbb’ identified by ‘ccc’ 这个SQL语句创建,用alter user ‘aaa’@’bbb’ identified by ‘ccc’ 这个SQL语句修改。
下面是创建好数据库后,一些实用的创建用户和授权的参考SQL:
/*创建个hive用户密码是 hive@123,任何主机都可连,可访问任何对象*/
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive@123';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' ;
FLUSH PRIVILEGES;
/*创建个hive用户密码是 hive@123,仅服务器上可连,可访问任何对象*/
CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive@123';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'localhost' ;
FLUSH PRIVILEGES;
/*创建个hive用户密码是 hive@123,仅IP为192.168.11.28可连,可访问任何对象*/
CREATE USER 'hive'@'192.168.11.28' IDENTIFIED BY 'hive@123';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'hdp01' WITH GRANT OPTION ;
FLUSH PRIVILEGES;
mysql数据库的console常用命令:
执行mysql提供参数进入的是mysql数据库的console,可以使用命令进行数据库的管理,常用的命令有:
use xxx; 切换连接某数据库
show databases; 列出所有的数据库
show tables; 列出当前数据库下所有的表
describe xxx; 列出表的结构
show variables like ‘version’ ; 列出数据库的版本
mysql数据库的表名缺省是大写存储的,并且大小写,有包含小写字符的表名要用引号括起来,如:
select * from “t01”
如果需要表名大小写不敏感(有的系统的数据初始化脚本要求这样),需要在my.cnf中加入下面一行:
lower_case_table_names = 1
上一步骤示例的my.cnf配置文件中已加上了。
- 停止 mysql 数据库:
bin/mysqladmin --defaults-file=my.cnf -u root -p shutdown
输入root密码后mysql数据库就停止了。
下面错误的服务器端解决办法:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'A.CLUSTER_ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
出现这个错误的原因是,MySQL在5.7版后缺省的sql_mode中设置了 ONLY_FULL_GROUP_BY这个选项。
服务器端解决的办法是,在配置文件中去掉这个选项,例如上一步骤示例的my.cnf配置文件中已去掉了这行变成下面的内容了:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
附:
- yum安装MySQL(以官方CentOS 7 yum源为例)
yum安装MySQL需要root权限,并且yum源中MySQL源的名称是mariadb-server.x86_64
官方源在base中包含了,目前的CentOS 7带的mariadb版本是 5.6.30。
# yum install mariadb-server.x86_64
安装完成后,缺省配置文件是 /etc/my.cnf :
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
在目录/etc/my.cnf.d可以增加用户的配置文件,官方配置文件的最后一句会将这个目录下的文件内容都包含进去。
安装完成后,mariadb添加了一个服务 mariadb.service。
启动:管理员采用 systemctl start mariadb.service 命令启动数据库服务。
第一次启动后,使用 mysql_secure_installation 命令执行安全初始化,添加root密码,删除匿名登录账户,禁止远程使用root用户登录,删除测试数据库
安装完成后,使用缺省端口,要修改端口,就修改/etc/my.cnf文件。
停止:管理员采用 systemctl stop mariadb.service 命令启动数据库服务。