在Ubuntu16.04下安装MySQL
首先执行下面三条命令:
sudo apt-get install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev
安装成功后可以通过下面的命令测试是否安装成功:
sudo netstat -tap | grep mysql
出现如下信息证明安装成功:
可以通过如下命令进入mysql服务:
mysql -u root -p 你的密码
现在设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1:
保存退出,然后进入mysql服务,执行授权命令:
语法模板
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' [with grant option];
库名:要远程访问的数据库名称,所有的数据库使用“ * ”
表名:要远程访问的数据库下的表的名称,所有的表使用“ * ”
用户名:要赋给远程访问权限的用户名称
IP地址:可以远程访问的电脑的IP地址,所有的地址使用“%”
密码:要赋给远程访问权限的用户对应使用的密码
[with grant option]:权限赋予/取消是级联的,如将with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。
all privilege 权限如下:
insert (插入数据)
select (查询数据)
update (更新表的数据)
delete (删除表中数据)
create (创建库,表)
drop (删除库,表)
refernces
index (建立索引)
alter (更改表属性)
create temp orary tables
lock tables (锁表)
execute
create view(创建视图)
show view (显示视图)
create routine (创建存储过程)
alter routine (修改存储过程)
event (事件)
trigger on (创建触发器)
数据库权限最好由 DBA 来统一管理。
授权一个用户(root)密码123456,可以对所有的库,所有的表做所有操作。来源地不限
grant all on *.* to root@'%' identified by '123456' with grant option;
--实例:创建zhangsan账号,密码123,授权lamp61库下所有表的增/删/改/查数据,来源地不限
mysql> grant select,insert,update,delete on lamp61.* to zhangsan@'%' identified by '123';
mysql> grant all on *.* to zhangsan@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
添加用户, 并授予在lamp189的数据库中可以对user表进行 查询和添加数据操作
GRANT select,insert ON lamp189.user TO 'xxoo'@'%' IDENTIFIED BY 'abcd'
刷新生效,否则就要重启MySQL服务才可以(数据库命令)
flush privileges;
然后执行quit命令退出mysql服务,执行如下命令重启mysql:(linux命令)
service mysql restart
现在在windows下可以使用navicat远程连接ubuntu下的mysql服务:
删除用户
drop user 账号@来源 drop user 'xxoo'@'%'
可能出现的错误
Ubuntu中更新软件时经常会碰到一个问题:
E: 无法获得锁 /var/cache/apt/archives/lock - open (11 资源临时不可用)
E: 无法对下载目录加锁
造成该问题的原因是系统中只允许有一个apt-get进程,当前的锁已经被占用了。我们可以关掉当前的apt-get进程后,再执行我们自己的操作。
解决方案一:
先执行命令ps aux | grep apt-get,找出当前的apt-get进行,然后kill掉该进程。
解决方案二:
直接rm rm /var/cache/apt/archives/lock 和 rm /var/lib/dpkg/lock。
E: 解决Ubuntu安装Mysql时未设置密码
解决方案:
需要sudo cat /etc/mysql/debian.cnf
在这个文件里面有着MySQL默认的用户名和用户密码, 最重要的是:用户名默认的不是 root,而是 debian-sys-maint
成功进入MySQL
版本5.7password字段已经被删除了,取而代之的是authentication_string字段,我的是5.7版本,密码更改一下:
update mysql.user set authentication_string=password('此处写你要设置的密码') where user='root'and Host = 'localhost';
如果提示:
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
则证明修改 成功
然后重启:(linux命令)
service mysql restart
登录测试: mysql -u root -p 会提示:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
出现这个问题后,我们用 sudo mysql -u root -p ,这样可以进入MySQL 进入MySQL后输入
SELECT User, Host, plugin FROM mysql.user;
看见root中plugin用的是 auth_socket
输入:
USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
exit;
最后在使用 mysql -u root -p就可以了
MySQL忘记root密码
windows
1.结束正在运行的数据库服务器进程 mysqld.exe
2.在DOS命令行执行 mysqld --skip-grant-tables
3.再打开一个DOS窗口, 可直接输入 mysql 以管理员的身份强行进入.
4. use mysql
5. update user set authentication_string=password('新密码') where user='root';
6. 刷新权限 flush privileges;
Ubuntu 16.04 LTS
-- ubuntu 下, mysql忘记密码后重置mysql密码
-- 修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vim。
-- 重启mysqld
sudo /etc/init.d/mysqld restart
-- 登录并修改MySQL的root密码
mysql
mysql> USE mysql ;
mysql> update mysql.user set authentication_string=password('abc123') where user='root' and Host = 'localhost';
mysql> flush privileges ;
mysql> quit
-- 重新修改配置文件 把刚才添加的一句注释或者删除
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
-- 重新启动服务
sudo /etc/init.d/mysqld restart
-- 使用新密码重新登录mysql
mysql -u root -p
mysql>
Ubuntu16.04完全卸载Mysql 5.7
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove