前言
MySQL是个关系型数据库,5.0版本后,其默认的InnoDB引擎引入了事务机制,于是开始受到企业用户的青睐。(题外话,MySQL是被Oracle收购的,于是,Oracle和DB2几乎垄断了大型企业的关系型数据库市场,也几乎垄断了互联网公司的关系型数据库市场......)因此,作为一个有抱负的程序员,学好MySQL是多么的重要。
单节点MySQL的安装
单节点MySQL,肯定不会是企业正常的生产环境下使用的MySQL方案。因此,我推荐CentOS系统下使用yum安装,Ubuntu系统下使用apt安装。
yum安装
替换yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo mirrors.163.com/.help/CentOS7-Base-163.repo
如何讲yum源更改回来??
更新缓存
yum clean all
yum makecache
yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
-y表示不需要确认安装哪些程序包,默认都是yes
yum install mysql-community-server -y
yum install perl -y
yum install net-tools -y
chmod -R 777 /var/lib/mysql
mysqld --initialize
chmod -R 777 /var/lib/mysql/*
service mysql/mysqld start
service mysql/mysqld stop
service mysql/mysqld restart
查看初始root密码
grep 'temporary password' /var/log/mysqld.log
apt安装
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
dpkg -i mysql-apt-config_0.8.12-1_all.deb
执行完dpkg,会出现下方的图示。这个是让你配置的,如果不需要换mysql版本,直接选ok就行
apt-get update
apt-get install mysql-server
执行mysql安装过程中,要为root设置密码,在如下页面设置密码
service mysql status
service mysql stop
service mysql start
service mysql restart
解决一个报错
Navicat 链接mysql 显示 Clinet dose not support authentication protocol request by server ;consider upgrading MySQL client,需要做如下事情:
1 在命令窗口 输入mysql -uroot -p 首先通过cmd进入mysql
2 更改加密方式
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.10 sec)
3 更改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
Query OK, 0 rows affected (0.35 sec)
这个密码是navicat链接mysql 的密码
insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
这样就创建了一个名为:test 密码为:1234 的用户。
先建立用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL ON databaseName.* TO 'username'@'localhost';
GRANT ALL ON databaseName.* TO 'username'@'%';
ALTER USER 'username'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
flush privileges;
注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
ALTER USER 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
2.为用户授权
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
mysql>flush privileges;//刷新系统权限表
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on testDB.* to test@localhost identified by '1234';
mysql>flush privileges; //刷新系统权限表
授权test用户拥有所有数据库的某些权限:
mysql>grant select,delete,update,create,drop on . to test@"%" identified by "1234";
//test用户对所有数据库都有select,delete,update,create,drop 权限。
//@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
//对localhost授权:加上一句grant all privileges on testDB.* to test@localhost identified by '1234';即可。
3.删除用户
Delete FROM user Where User='test' and Host='localhost';
drop database testDB; //删除用户的数据库
drop user 用户名@'%';
drop user 用户名@ localhost;
update mysql.user set password=password('新密码') where User="test" and Host="localhost";