linux mysql安装
mysql-community-common-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-5.7.17-1.el6.x86_64.rpm
mysql-community-client-5.7.17-1.el6.x86_64.rpm
mysql-community-devel-5.7.17-1.el6.x86_64.rpm
mysql-community-server-5.7.17-1.el6.x86_64.rpm
- 报错:
原因:已存在mysql-libs-5.1.66-2.el6_3.x86_64的库(这是linux自带的)所以需要先删除以前的库才能安装!
执行命令:
rpm -e mysql-libs-5.1.66-2.el6_3.x86_64 --nodeps 强制卸载!
然后查看:
rpm -qa|grep mysql
- 报错:
原因:已存在mariadb-libs-5.5.56-2.el7.x86_64的库(这是linux自带的)所以需要先删除以前的库才能安装!
执行命令:
rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps 强制卸载!
- 报错
原因:这是由于yum安装了旧版本的GPG keys造成的 解决办法: --force --nodeps
- 报错
启动报错
mysql在进行初始化的时后,会检测数据目录是否存在,如过不存在,mysql会创建它, 如果存在,而且这个目录里有数据,mysql会报错,并且终止初始化:
解决方案:
将这个数据目录删掉,或者重命名,如果数据比较重要,建议重命名,后期再重新导入就ok了
我用的rpm包安装,默认数据目录在
/var/lib/mysql/
直接删除
rm -fr /var/lib/mysql
完成后,重新启动
- 报错
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
解决方案:
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
(5.7版本之上
在my.cnf中
在[mysqld]的段中加上一句:skip-grant-tables
skip-grant-tables 的意思是跳过权限验证,
重新启动mysqld,mysql -u root;直接登录
update mysql.user set authentication_string=password('dians#2016') where user='root';)
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>
- 报错
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
修改/etc/my.cnf
添加以下内容到/etc/my.conf:
[client]
socket = /Data/mydata/mysql.sock
- 报错
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
解决方案:
SET PASSWORD = PASSWORD('输入新设的密码newpassword
');
- 报错
解决方案:
ALTER USER USER() IDENTIFIED BY 'dians#2016';
如果还是报错,可能是密码难度系数不够。
注:密码复杂度修改参考https://www.cnblogs.com/ivictor/p/5142809.html
首次启动mysql,root密码会保存在mysqld.log文件中
获取临时密码:
第一次通过# grep "password" /var/log/mysqld.log 命令获取MySQL的临时密码
用该密码登录到服务端后,必须马上修改密码,不然操作查询时报错误
远程连接
今天在服务器安装了mysql,准备用mysqlguitools远程登录的时候出错,提示:Host 'xxx' is not allowed to connect to this MySQL server。网上找了一些资料,是mysql未开启mysql远程访问权限导致。
记录解决方案供以后参考。:
1.登录到mysql: mysql -uroot -ppwd
2.查看user表:
mysql> use mysql
Database changed
mysql> select host,user,password from user;
+------+------+-------------------------------------------+
| host | user | password |
+------+------+-------------------------------------------+
| localhost | root | *826960FA9CC8A87953B3156951F3634A80BF9853 |
+------+------+-------------------------------------------+
1 row in set (0.00 sec)
表中host、user字段标识了可以访问数据库的主机和用户。例如上面的数据就表示只能本地主机通过root用户访问。原来如此,难怪远程连接死活连不上。
为了让数据库支持远程主机访问,有两种方法可以开启远程访问功能。
第一种(改表法):
修改host字段的值,将localhost修改成需要远程连接数据库的ip地址。或者直接修改成%。修改成%表示,所有主机都可以通过root用户访问数据库。为了方便,我直接修改成%。命令:mysql> update user set host = '%' where user = 'root';
再次查看user表
+------+------+-------------------------------------------+
| host | user | password |
+------+------+-------------------------------------------+
| % | root | *826960FA9CC8A87953B3156951F3634A80BF9853 |
+------+------+-------------------------------------------+
1 row in set (0.00 sec)
修改成功,输入命令mysql> FLUSH PRIVILEGES; 回车使刚才的修改生效,再次远程连接数据库成功。
第二种(授权法):
例如,你想root使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
输入命令mysql> FLUSH PRIVILEGES; 回车使刚才的修改生效,再次远程连接数据库成功。bingo.
别忘记最后的FLUSH PRIVILEGES; 刷新先前的修改。
grant all privileges on *.* to 'zabbix'@'%' identified by 'Zabb#3347' with grant option;
all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”zabbix”@”192.168.0.%”
identified by:指定用户的登录密码
grant select ,update on bd_corp to testuser1 [with grant option ]
1.如果带了 with grant option
那么用户testuser1可以将select ,update权限传递给其他用户( 如testuser2)
grant select,update on bd_corp to testuser2
2.如果没带with grant option
那么用户testuser1不能给testuser2授权
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。
重启服务
service mysql restart
在终端输入:
mysql -h 服务器ip地址 -P 3306 -u root -p
然后输入密码即可
root是第1点设置的用户名,密码也是第1点设置的密码
第二个有可能的原因也是一个比较低级的错误,我们都知道mysql一创建就默认带一个叫mysql的数据库,如下图所
导出
配置修改修改/etc/my.cnf
datadir=/app/mysql
socket=/app/mysql/mysql.sock
log-error=/app/log/mysqld.log
pid-file=/app/mysqld/mysqld.pid
修改文件夹权限
chmod 777 /app
chmod 777 /app/mysql/
chown -R mysql:mysql /app
mysql卸载
- 卸载步骤:
- rpm -qa|grep -i mysql #查出的全部删除
- 例:rpm -ev MySQL-client-5.5.25a-1.rhel5(这种方式删除了用下面的)
- 例:rpm -ev MySQL-client-5.5.25a-1.rhel5 --nodeps
- find / -name mysql #查出的全部删除
- 例:rm -rf /var/lib/mysql
- rm -rf /etc/my.cnf
- rpm -qa|grep -i mysql #再查一遍