以下命令适合修改任何mysql用户,仅以root为例。
一、拥有原来的myql的root的密码;
# mysql -uroot -p
Enter password: 【输入原来的密码】(如果安装完mysql第一次设置root密码,则直接回车)
mysql>use mysql;
mysql> update user set password=password("123456") where user='root';
mysql> flush privileges;
mysql> exit;
第一种方法:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
第二种方法:mysqladmin -u用户名 -p旧密码 password 新密码
第三种方法:update user set Password = password('root') where User='root';
flush privileges;
二、忘记原来的myql的root的密码;
首先,你必须要有操作系统的root权限了。也就说需要以root的身份登录到操作系统,然后进行一下操作。
1、编辑MySQL配置文件my.cnf,
vi /etc/my.cnf
#编辑文件,找到[mysqld],在下面添加一行skip-grant-tables[mysqld]
skip-grant-tables
:wq! #保存退出service mysqld restart #重启MySQL服务
2、进入MySQL控制台
mysql -uroot -p
#直接按回车,这时不需要输入root密码。
3、修改root密码
update mysql.user set password=password('123456') where User="root" and Host="localhost";
flush privileges;
grant all on *.* to 'root'@'localhost' identified by '123456' with grant option;
4、取消/etc/my.cnf中的skip-grant-tables
vi /etc/my.cnf
编辑文件,找到[mysqld],删除skip-grant-tables这一行
:wq! #保存退出
5、重启mysql
service mysqld restart
#重启mysql,这个时候mysql的root密码已经修改为123456
6、进入mysql控制台
mysql -uroot -p123456
大功告成!
二、修改数据库的密码
1、首先要先知道,如果以root权限登录数据库的话,你可以看到mysql下有个user表,里面存储的是全部的用户信息,包括user,host,password,查询的命令:
1
select user,host,password from mysql.user;
1
2、如果要修改用户的信息,则可以通过sql语句直接修改,例如,要修改用户名为admin 的密码为admin://查询所有的用户信息
mysql>select user,host,password from mysql.user;
//修改admin用户的密码
mysql>update user set password=password('admin') where user='admin';
//刷新权限表(必须)
mysql>flush privileges;
//修改成功之后要退出mysql数据库,重新登录一下
mysql>exit;3、关于给用户授权的问题:
//登录MYSQL(有ROOT权限)。我里我以ROOT身份登录.
@>mysql -u root -p
@>密码
//首先为用户创建一个数据库(phplampDB)
mysql>create database phplampDB;
//授权phplamp用户拥有phplamp数据库的所有权限。
>grant all privileges on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系统权限表
mysql>flush privileges;
mysql>其它操作
/*
如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系统权限表。
mysql>flush privileges;
*/4、关于创建新用户的问题:
“`
//登录MYSQL
@>mysql -u root -p
@>密码
//创建用户
mysql> insert into mysql.user(Host,User,Password) values(“localhost”,”phplamp”,password(“1234”));
//刷新系统权限表
mysql>flush privileges;
这样就创建了一个名为:phplamp 密码为:1234 的用户。
然后登录一下。
mysql>exit;
@>mysql -u phplamp -p
@>输入密码
mysql>登录成功
授予用户最大的权限,所有的权限
grant all privileges on *.* to username@'%' indentified by 'password';grant all privileges on *.* to username@'%' identified by 'password';
移除权限
revoke all privileges on . from 用户@"%" identified by '密码';
数据库的备份与恢复
备份
mysqldump -u root -p --all-databases > /tmp/db.sql
数据导入,方式有2种
source /tmp/db.sql;
第二种
mysql -uroot -p < /tmp/db.sql
第三种
navicat
第四种,如果你数据量特别大的话,使用第三方工具
xtrabackup
mysql主从复制
mysql主从复制背景
1.如果你是单点数据库
2.主备数据库,挂了一台主库,我可能还有千千万万个备用的数据库
mysql主从复制的步骤
1.在matser主库上的操作,开启主库功能
systemctl stop mariadb
编辑/etc/my.cnf
写入如下信息
[mysqld]
server-id=10
log-bin=qishi-logbin
systemctl start mariadb
2.在主库创建用户,用于同步数据
create user yuanqing@'%' identified by 'yq666';
授予普通用户,slave的身份
grant replication slave on . to 'yuanqing'@'%';
3.锁定数据库的库表,禁止写入
这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行。
解锁语句是:UNLOCK TABLES;
flush table with read lock;
记录下主库的状态,记录下,日志文件的名字,和位置
show master status;
4.导出主库的数据
mysqldump -u root -p --all-databases > /tmp/db.sql
5.远程传输主库的数据,给从库,进行导入
scp /tmp/db.sql root@192.168.11.167:/tmp/
6.解锁主库的锁,写入数据,查看从库是否同步
unlock tables;连接远程数据库:
1、显示密码
如:MySQL 连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”
C:/>mysql -h 192.168.5.116 -P 3306 -u root -p123456
2、隐藏密码
如:MySQL 连接本地数据库,用户名为“root”,
C:/>mysql -h localhost -u root -p
Enter password:
二、配置mysql允许远程链接
默认情况下,mysql帐号不允许从远程登陆,只能在localhost登录。本文提供了二种方法设置mysql可以通过远程主机进行连接。
一、改表法
在localhost登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改称"%"
例如:
#mysql -u root -p
Enter password:
……
mysql>
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
二、授权法
例如: 你想myuser使用mypassword(密码)从任何主机连接到mysql服务器的话。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES
使修改生效,就可以了
常见问题:
1、在采用法二授权法之后,无法在本地登录mysql(如:#mysql -u root -p -h 192.168.5.116
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'loadb116' (using password: YES)
上例中loadb116是主机名.
解决方法:
1、这时可以使用:mysql -u root -p 登录,进入到mysql后。
mysql> grant all privileges on *.* to 'root'@'loadb116'
identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2、在本地使用ip地址登录
# mysql -u root -p -h 192.168.5.116
Enter password:
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 60
Server version: 5.1.45 MySQL Community Server (GPL)
Type 'help;' or '/h' for help. Type '/c' to clear the buffer.
mysql>