www.mysql.com www.oracle.com
http://dev.mysql.com/doc/refman/5.7/en/linux-installation.html
Oracle MySQL、MariaDB、Percona server
Select Platform:
二进制 rpm Yum Repository mysql57-community-release-el7-9.noarch.rpm
二进制 预编译 Generic mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
源码包安装 Source Code mysql-5.7.19.tar.gz
安装环境
[root@mysql1 ~]# rpm -q mariadb-server
package mariadb-server is not installed
[root@mysql1 ~]# sed -ri ‘/^SELINUX=/c\SELINUX=disabled’ /etc/selinux/config
[root@mysql1 ~]# setenforce 0
http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum -y install mysql-server
mysql -uroot -p'123'
show databases;
[root@tianyun Downloads]# md5sum mysql57-community-release-el7-9.noarch.rpm
[root@tianyun Downloads]# yum -y install mysql57-community-release-el7-9.noarch.rpm
[root@git ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,019
extras/7/x86_64 CentOS-7 - Extras 321
mysql-connectors-community/x86_64 MySQL Connectors Community 74
mysql-tools-community/x86_64 MySQL Tools Community 74
mysql57-community/x86_64 MySQL 5.7 Community Server 307
updates/7/x86_64 CentOS-7 - Updates 628
repolist: 11,423
[root@git ~]# yum repolist all | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community enabled: 74
mysql-connectors-community-source MySQL Connectors Community - S disabled
mysql-tools-community/x86_64 MySQL Tools Community enabled: 74
mysql-tools-community-source MySQL Tools Community - Source disabled
mysql-tools-preview/x86_64 MySQL Tools Preview disabled
mysql-tools-preview-source MySQL Tools Preview - Source disabled
mysql55-community/x86_64 MySQL 5.5 Community Server disabled
mysql55-community-source MySQL 5.5 Community Server - S disabled
mysql56-community/x86_64 MySQL 5.6 Community Server disabled
mysql56-community-source MySQL 5.6 Community Server - S disabled
mysql57-community/x86_64 MySQL 5.7 Community Server enabled: 307
mysql57-community-source MySQL 5.7 Community Server - S disabled
mysql80-community/x86_64 MySQL 8.0 Community Server disabled
mysql80-community-source MySQL 8.0 Community Server - S disabled
[root@git ~]# yum-config-manager --enable mysql56-community
将此56的MySQL设置成开机自启动
报错解决方式:
-bash: yum-config-manager: command not found
这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里。
yum -y install yum-utils
[root@git ~]# yum repolist enabled | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 74
mysql-tools-community/x86_64 MySQL Tools Community 74
mysql56-community/x86_64 MySQL 5.6 Community Server 429
mysql57-community/x86_64 MySQL 5.7 Community Server 307
[root@mysql1 ~]# yum -y install mysql-community-server
[root@mysql1 ~]# systemctl start mysqld //第一次启动先初始数据库
[root@mysql1 ~]# systemctl enable mysqld
[root@mysql1 ~]# ls /var/lib/mysql
auto.cnf client-key.pem ib_logfile1 mysql.sock.lock server-cert.pem
ca-key.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem
ca.pem ibdata1 mysql private_key.pem sys
client-cert.pem ib_logfile0 mysql.sock public_key.pem
[root@mysql ~]# grep "password" /var/log/mysqld.log
2019-01-15T06:45:28.734665Z 1 [Note] A temporary password is generated for root@localhost: VFISQo_dt7Rt
2019-01-15T06:47:41.765992Z 3 [Note] Access denied for user 'root'@'localhost' (using password: YES)
[root@mysql ~]# mysql -uroot -p'VFISQo_dt7Rt'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, 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>
mysql> alter user 'root'@'localhost' identified by "1qaz2WSX#"; 修改密码
Query OK, 1 row affected (0.00 sec)
mysql> \q
Bye
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql>
网址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads ------->community---->Mysql Community Server ----->MySQL Community Server 5.7
mysql 5.7.24的tar包:https://dev.mysql.com/downloads/file/?id=481075
总的包https://dev.mysql.com/downloads/file/?id=481150
1. 编译安装
[root@mysql1 ~]# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make
cmake:
[root@mysql1 ~]# yum -y install cmake 跨平台安装工具
boost:
[root@mysql1 ~]# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz c++库
wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
mysql:
[root@mysql1 ~]# groupadd mysql
[root@mysql1 ~]# useradd -r -g mysql -s /bin/false mysql
[root@mysql1 ~]# tar xvf mysql-5.7.19.tar.gz
[root@mysql1 ~]# cd mysql-5.7.19
[root@mysql1 mysql-5.7.19]# pwd
/root/mysql-5.7.19
解压boost文件
[root@mysql3 ~]# tar xf /root/boost_1_59_0.tar.gz
[[email protected] ~]# cmake . \
-DWITH_BOOST=boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1
下面这个是一定会遇到的,只需加上下面的命令就可以了
提示:boost也可以使用如下指令自动下载
-DDOWNLOAD_BOOST=1
[root@mysql1 ~]# make
[root@mysql1 ~]# make install
2. 初始化
[root@mysql1 local]# cd mysql
[root@mysql1 mysql]# mkdir mysql-files
[root@mysql1 mysql]# chown -R mysql.mysql .
[root@mysql1 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysql1 mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
建立MySQL配置文件my.cnf
[root@mysql1 mysql]# vim /etc/my.cnf
[mysqld]sys
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
启动MySQL
***centos6***
使用centos6 mysql.server脚本(system V)
[root@mysql1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@mysql1 mysql]# chkconfig --add mysqld
[root@mysql1 mysql]# chkconfig mysqld on
[root@mysql1 mysql]# service mysqld start
[root@mysql1 mysql]# service mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql2.err'.
SUCCESS!
[root@mysql1 mysql]# ps aux |grep mysqld
mysql 76 pts/0 Sl 14:38 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=mysql2.err --pid-file=/usr/local/mysql/data/mysql2.pid
报错1:
启动的时候会遇到default-character-set=utf8mb4报错,将下面这个写入到/etc/my.cnf
default-character-set=utf8mb4
报错2:
root@MyServer:~# service mysql start
Starting MySQL
..The server quit without updating PID file (/usr/local/mysql/data/MyServer.pid). ... failed!
错误解决排查思路:
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限
2.可能进程里已经存在mysql进程
3.实在不行就重新初始化
登陆数据库:
[root@MySQL ~]# /usr/local/mysql/bin/mysql -uroot -p'zijz,Bsqe2 show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user 'root'@'localhost' identified by '123' ;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
PATH[可选]
[root@mysql2 mysql]# mysql
-bash: mysql: command not found
[root@mysql2 mysql]# /usr/local/mysql/bin/mysql
[root@mysql1 mysql]# echo “export PATH=$PATH:/usr/local/mysql/bin” >> /etc/profile
[root@mysql1 mysql]# source /etc/profile
[root@mysql1 mysql]# mysqladmin -uroot -p’>>e4KKcol6i1’ password ‘(TianYunYang123)’
我们在安装mysql的时候可能会遇到这个问题:
遇到这个说明我们已经初始化过数据库,我们需要重新初始化一下
如果需要重新初始化…[可选]
[root@mysql1 ~]# killall mysqld
[root@mysql1 ~]# rm -rf /usr/local/mysql/data
[root@mysql1 mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysql1 mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
RPM or Yum:
datadir: /var/lib/mysql
源码包 和 预编译:
basedir: datadir:
/usr/local/mysql /usr/local/mysql/data
cmake编译mysql出现如下错误:
安装ncurses-devel:yum -y install ncurses-devel(Debian/Ubuntu需安装libncurses5-dev)
删除CMakeCache.txt(该文件在mysql解压目录)
重新编译就可以了
原文:https://blog.csdn.net/zsl10/article/details/51824091
[root@mysql1 ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables 跳过密码验证
[root@mysql1 ~]# service mysqld restart
[root@mysql1 ~]# mysql
mysql> update mysql.user set password=password("123") where user="root" and host="localhost";
mysql> flush privileges;
mysql> \q
[root@mysql1 ~]# vim /etc/my.cnf
[mysqld]
#skip-grant-table
[root@mysql1 ~]# service mysqld restart
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables
[root@slave1 ~]# systemctl restart mysqld
’
开始进入数据库进行相关的操作
添加新的密码后,退出数据库
[root@slave1 ~]# vim /etc/my.cnf
删除添加的一行
[root@slave1 ~]# systemctl restart mysqld
修改mysql root 密码
update mysql.user set authentication_string=password('123') where user='root'; 键值(跳过密码验证后,重置数据库密码,建议大小写数字符号),有可能不成功是密码规则不符
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
错误1819 (HY000):您的密码不满足当前的策略要求
alter user user() identified by "1qaz2WSX#"; 修改数据库密码(符合密码规则)
flush privileges; 重新加载特权
修改完 密码后记得进入/etc/my.cnf 下去添加注释# 然后重启服务后,重新进入数据库。
mysqladmin -u root -p')vl*hfrZg3-t' password 'Qianfeng123!' 通过mysqladmin修改数据库密码
语法: CREATE DATABASE 数据库名;
数据库命名规则:
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
mysql> create table
test1
(test1 是数据库里的表
-> tinyint_test tinyint, tinyint数据类型
-> int_test int
-> );
mysql> desc test1;
±-------------±-----------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------------±-----------±-----±----±--------±------+
| tinyint_test | tinyint(4) | YES | | NULL | |
| int_test | int(11) | YES | | NULL | |
±-------------±-----------±-----±----±--------±------+
2 rows in set (0.01 sec)
mysql> insert into test1 values (111,111); 输入数值
Query OK, 1 row affected (0.09 sec)
mysql> insert into test1(tinyint_test) values(128);
ERROR 1264 (22003): Out of range value for column ‘tinyint_test’ at row 1 超出这是类型的数值
mysql> insert into test1(int_test) values(2147483647);
Query OK, 1 row affected (0.05 sec)
删除表和库
:
表:
创建表 create table
查看表结构 desc table, show create table
表完整性约束
修改表 alter table
复制表 create table …
删除表 drop table
库
查看数据库:SHOW DATABASES;
选择数据库:
SELECT database();
USE 数据库名
use zhaohan
删除数据库:DROP DATABASE 数据库名;
mysql> drop database zhaohan;
查询:
简单查询
SELECT * FROM employee5;
SELECT name, salary, dep_id FROM employee5;
避免重复DISTINCT
SELECT post FROM employee5;
SELECT DISTINCT post FROM employee5; 去重
注:不能部分使用DISTINCT,通常仅用于某一字段。
通过四则运算查询
SELECT name, salary, salary14 FROM employee5;
SELECT name, salary, salary14 AS Annual_salary FROM employee5;
SELECT name, salary, salary*14 Annual_salary FROM employee5;
定义显示格式
CONCAT() 函数用于连接字符串
SELECT CONCAT(name, ’ annual salary: ', salary*14) AS Annual_salary FROM employee5;
二、单条件查询
单条件查询
SELECT name,post
FROM employee5
WHERE post=‘hr’;
select name,post from employee5 where post=‘hr’;
多条件查询
SELECT name,salary
FROM employee5
WHERE post=‘hr’ AND salary>10000;
select name,salary post from employee5 where post=‘hr’ and salary >1000;
关键字BETWEEN AND
SELECT name,salary FROM employee5
WHERE salary BETWEEN 5000 AND 15000;
SELECT name,salary FROM employee5
WHERE salary NOT BETWEEN 5000 AND 15000;
select name,salary from employee5 where salary not between 5000 and 15000;
关键字IS NULL
SELECT name,job_description FROM employee5
WHERE job_description IS NULL;
SELECT name,job_description FROM employee5
WHERE job_description IS NOT NULL;
SELECT name,job_description FROM employee5
WHERE job_description=" ";
关键字IN集合查询
SELECT name, salary FROM employee5
WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;
SELECT name, salary FROM employee5
WHERE salary IN (4000,5000,6000,9000) ;
SELECT name, salary FROM employee
WHERE salary NOT IN (4000,5000,6000,9000) ;
关键字LIKE模糊查询
通配符’%’
SELECT * FROM employee5
WHERE name LIKE ‘al%’;
通配符’’
SELECT * FROM employee5
WHERE name LIKE 'al__’;
三、查询排序
按单列排序
SELECT * FROM employee5 ORDER BY salary;
SELECT name, salary FROM employee5 ORDER BY salary ASC; 从低到高一次排序
SELECT name, salary FROM employee5 ORDER BY salary DESC; 从高到低一次排序
按多列排序
SELECT * FROM employee5
ORDER BY hire_date DESC,
salary ASC;
引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。
用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。
由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。
因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。可以备份表和库。
MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。是备份不了的,企业里是不使用的。
黑洞存储引擎,可以应用于主备复制中的分发主库。
精讲:
1.InnoDB
从mysql 5.5版本开始,innodb是mysql默认的存储引擎。innodb具有以下优点
• 灾难恢复性好
• 支持事务,默认的事务隔离级别是可重复读,其事务控制是通过多版本并发控制来实现的。
• 使用行级锁
• 对于InnoDB引擎中的表, 其数据的物理组织形式是簇表(Cluster Table) , 数据按主键来组织, 也就是说主键索引和数据是在一起的, 数据按主键的顺序物理分布。 数据表的另一种常见形式是非簇表, 其索引是有序的, 而数据是无序的。
• 实现了缓冲管理, 不仅能缓冲索引也能缓冲数据, 并且会自动创建散列索引以加快数据的获取。 相比之下, MyISAM只是缓存了索引。
• 支持外键。
• 支持热备份
2.MyISAM引擎
• 可以配合锁, 实现操作系统下的复制备份、 迁移。
• 使用表级锁, 并发性差。
• 支持全文检索(MySQL InonoDB在5.6以后也支持全文检索) 。
• 主机宕机后, MyISAM表易损坏, 灾难恢复性不佳。
• 无事务支持。
• 只缓存索引, 数据的缓存是利用操作系统缓冲区来实现的。 可能引发过多的系统调用且效率不佳。
• 数据紧凑存储, 因此可获得更小的索引和更快的全表扫描性能。
3.MEMORY引擎
• MEMORY存储引擎提供“内存”表, 也不支持事务、 外键。
• 使用内存表(内存引擎) 可以显著提高访问数据的速度, 可用于缓存会频繁访问的、 可以重构的数据、 计算结果、 统计值、 中间结果, 但也有如下这些不足之处。
• 使用的是表级锁, 虽然内存访问快, 但如果频繁地读写, 表级锁可能会成为瓶颈所在。
• 只支持固定大小的行。 VARCHAR类型的字段会存储为固定长度的CHAR类型, 浪费空间。
• 不支持TEXT、 BLOB字段。 当有些查询需要使用到临时表(使用的也是MEMORY存储引擎) 时如果表中有TEXT、 BLOB字段, 那么会转化为基于磁盘的MyISAM表, 严重降低性能。
• 由于内存资源成本昂贵, 一般不建议设置过大的内存表, 如果内存表满了, 就会在MySQL错误日志里发现类似“Thetable‘table_name’is full”这样的错误, 可通过清除数据或调整内存表参数来避免报错。
• 服务器重启数据会丢失
4.ARCHIVE引擎
• ARCHIVE存储引擎是被设计用来存储企业中的大量流水数据的存储引擎。 ARCHIVE引擎使用zlib无损数据压缩, 让数据都保存在压缩的存档表中。 当数据被插入时, 它们被压缩。
• 它只支持INSERT和SELECT, 支持自增键及其上的索引, 不支持其他索引。 它适合做日志记录、 用户行为分析, 不需要UPDATE、 DELETE和索引的数据
远程连接MySQL
示例:
mysql -h192.168.5.240 -P 3306 -u root -p123 mysql -e ‘select user,host from user’
-h 指定主机名 【默认为localhost】
-P MySQL服务器端口 【默认3306】
-u 指定用户名 【默认root】
-p 指定登录密码 【默认为空密码】
此处mysql为指定登录的数据库
-e 接SQL语句
grant 权限列表 on 库名.表名 to ‘用户名’@‘客户端主机’ [identified by ‘密码’ with option参数];
==权限列表 all 所有权限(不包括授权权限)
select,update
==数据库.表名 . 所有库下的所有表 Global level
web.* web库下的所有表 Database level
web.stu_info web库下的stu_info表 Table level
SELECT (col1), INSERT (col1,col2) ON mydb.mytbl Column level
==客户端主机 % 所有主机
192.168.2.% 192.168.2.0网段的所有主机
192.168.2.168 指定主机
localhost 指定主机
==with_option参数
GRANT OPTION: 授权选项
MAX_QUERIES_PER_HOUR: 定义每小时允许执行的查询数
MAX_UPDATES_PER_HOUR: 定义每小时允许执行的更新数
MAX_CONNECTIONS_PER_HOUR: 定义每小时可以建立的连接数
MAX_USER_CONNECTIONS: 定义单个用户同时可以建立的连接数
查看授权的权限
SHOW GRANTS\G
SHOW GRANTS FOR admin1@’%’\G
回收权限REVOKE
语法:
REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’
示例:
REVOKE DELETE ON . FROM admin1@’%’; //回收部分权限
REVOKE ALL PRIVILEGES ON . FROM admin2@’%’; //回收所有权限
REVOKE ALL PRIVILEGES,GRANT OPTION ON . FROM ‘admin2’@’%’;