diff --git a/Linux/AliYun/阿里云管理MySQL.md b/Linux/AliYun/阿里云管理MySQL.md index 202db58..335fea5 100755 --- a/Linux/AliYun/阿里云管理MySQL.md +++ b/Linux/AliYun/阿里云管理MySQL.md @@ -1,304 +1,212 @@ -一). ubuntu下mysql安装布局: -/usr/bin                      客户端程序和mysql_install_db -/db                             数据库和日志文件 -/var/run mysqld        服务器 -/etc/mysql mysql       配置文件my.cnf -/usr/share/mysql       字符集,基准程序和错误消息 -/etc/init.d/mysql        启动mysql服务器 -二). 设置mysql服务器随开关机自动启动和关闭: -系统 -> 系统管理 -> 服务 -进行到“服务设置”窗口后,激活mysql数据库服务即可 -三). 修改mysql数据库文件的存储目录: -MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步: -1、home目录下建立data目录 -## cd /home -## mkdir data -2、把MySQL服务进程停掉: -## mysqladmin -u root -p shutdown -3、把/var/lib/mysql整个目录移到/home/data -## mv /var/lib/mysql** **/home/data/ -这样就把MySQL的数据文件移动到了/home/data/mysql下 -4、找到my.cnf配置文件 -如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下: -## [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf** **/etc/my.cnf -5、编辑MySQL的配置文件/etc/my.cnf -为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下: -## vi**  **my.cnf**  **(**==用****vi****工具编辑****my.cnf****文件,找到下列数据修改之**==) -## # The MySQL server -## [mysqld]**  **port** **= 3306 -## #socket**  **= /var/lib/mysql/mysql.sock**==(原内容,为了更稳妥用****“#”**==注释此行) -## socket**  **= /home/data/mysql/mysql.sock** **(加上此行) -6、修改MySQL启动脚本/etc/init.d/mysql -最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。 -## [root@test1 etc]# vi** **/etc/init.d/mysql -## #datadir=/var/lib/mysql====(注释此行) -## datadir=/home/data/mysql** **(加上此行) -7、重新启动MySQL服务 -/etc/init.d/mysql start(启动:sudo /etc/init.d/mysql start 停止:sudo /etc/init.d/mysql stop 重启:sudo /etc/init.d/mysql restart) -或用reboot命令重启Linux -如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。 -四). 配置mysql数据库的INNODB存储引擎: -1 . 查看mysql存储引擎情况: 登录mysql数据库,在mysql>提示符下搞入show engines;命令。发现: InnoDB | YES,说明此mysql数据库服务器支持InnoDB引擎。 -2. 设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。 -3. 重启mysql服务器:mysqladmin -u root -p shutdown(回车),sudo /etc/init.d/mysql start(回车)。 -4. 登录mysql数据库,在mysql>提示符下搞入show engines;命令。如果出现 InnoDB |DEFAULT,则表示我们 设置InnoDB为默认引擎成功。 -ps: 这里我用重启命令sudo /etc/init.d/mysql restart,出现错误信息, 所以用了上面(步骤3)那种关闭服务又启动的笨方法。 -五)、MYSQL数据库表大小写问题 -vi /etc/mysql/my.cnf -在[mysqld]后添加 -lower_case_table_names=0 区分大小写 -lower_case_table_names=1 不区分大小写 -重启MYSQL服务 -MYSQL在LINUX下数据库名、表名、列名、别名大小写规则如下: -1.数据库名与表名是严格区分大小写的 -2.表的别名是严格区分大小写的 -3.列名与列的别名在所有的情况下均是忽略大小写的 -4.变量名也是严格区分大小写的 -MYSQL在WINDOWS下都不区分大小写 -六)、管理Mysql -1、删除 mysql +# 阿里云管理 MySQL -1 sudo apt-get autoremove --purge mysql-server-5.0 -2 sudo apt-get remove mysql-server -3 sudo apt-get autoremove mysql-server -4 sudo apt-get remove mysql-common (非常重要) -上面的其实有一些是多余的,建议还是按照顺序执行一遍 +> Ubuntu MySQL 安装与配置 -清理残留数据 +--- -dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P -## 2、安装 mysql==== -1 sudo apt-get install mysql-server -2 sudo apt-get install mysql-client -3 sudo apt-get install php5-mysql(安装php5-mysql 是将php和mysql连接起来 ) -##  -## 一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:==== -1 sudo netstat -tap | grep mysql +## MySQL 目录布局 -当您运行该命令时,您可以看到类似下面的行: -tcp 0 0 localhost.localdomain:mysql *:* LISTEN - -如果服务器不能正常运行,您可以通过下列命令启动它: -1 sudo /etc/init.d/mysql restart +| 路径 | 说明 | +|------|------| +| `/usr/bin` | 客户端程序 | +| `/var/lib/mysql` | 数据库和日志文件 | +| `/var/run/mysqld` | 服务器 PID | +| `/etc/mysql` | 配置文件 | +| `/usr/share/mysql` | 字符集、错误消息 | +| `/etc/init.d/mysql` | 启动脚本 | -3、进入mysql -$mysql -u root -p 管理员密码 -配置 MySQL 的管理员密码: -1 sudo mysqladmin -u root password newpassword -[MySQL 导入慢的解决方法](http://www.gagahappy.com/mysqldump-import-slow/) -MySQL导出的SQL语句在导入时有可能会非常非常慢。在导出时合理使用几个参数,可以大大加快导 入的速度。 --e 使用包括几个VALUES列表的多行INSERT语法; -–max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小; -–net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。 -注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。 -首先确定目标库的参数值 -mysql>show variables like ‘max_allowed_packet’; -mysql>show variables like ‘net_buffer_length’; -根据参数值书写mysqldump命令,如: -E:\eis>mysqldump -uroot -p eis_db goodclassification -e –max_allowed_packet=1048576 –net_buffer_length=16384 >good3.sql -## 三**==.**==从数据库导出数据库文件: -## 1.**==将数据库****mydb****导出到****e:\mysql\mydb.sql**==文件中: -## 打开开始**==->****运行****->****输入****cmd**    ==进入命令行模式 -## c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql -## 然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。 -## 2.**==将数据库****mydb****中的****mytable****导出到****e:\mysql\mytable.sql**==文件中: -## c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql -## 3.**==将数据库****mydb****的结构导出到****e:\mysql\mydb_stru.sql**==文件中: -## c:\>mysqldump -h localhost -u root -p mydb --add-drop-table >e:\mysql\mydb_stru.sql -## 四**==.**==从外部文件导入数据到数据库中: -## 从**==e:\mysql\mydb2.sql****中将文件中的****SQL**==语句导入数据库中: -## 1.**==从命令行进入****mysql****,然后用命令****CREATE DATABASE mydb2;****创建数据库****mydb2**==。 -## 2.**==退出****mysql** **可以输入命令****exit****;或者****quit**==; -## 3.**==在****CMD**==中输入下列命令: -## c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql -## 然后输入密码,就**==OK**==了。 -## 五**==.**==下面谈一下关于导入文件大小限制问题的解决: -## 默认情况下:**==mysql** **对导入文件大小有限制的,最大为****2M**==,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下: -## 1.**==在****php.ini**==中修改相关参数: -## 影响**==mysql**==导入文件大小的参数有三个: -    **memory_limit=128M,upload_max_filesize=2M,post_max_size=8M** -## 修改**==upload_max_filesize=200 M**  ==这里修改满足你需要的大小, -## 可以同时修改其他两项====memory_limit=250M  post_max_size=200M -## 这样就可以导入**==200M****以下的****.sql**==文件了 - > 来自 <[http://blog.csdn.net/qingrx/article/details/7987030](http://blog.csdn.net/qingrx/article/details/7987030)> -![rootcocomap u mysqladmin u root p version Enter pa...](Exported%20image%2020260407231450-0.png) +--- -![ysql show databases Sg Database I information perf...](Exported%20image%2020260407231452-1.png) +## 基础命令 -进入mysql -$mysql -u root -p 管理员密码 -## 进入MySQL Command line client下 +```bash +# 启动/停止/重启 +sudo systemctl start mysql +sudo systemctl stop mysql +sudo systemctl restart mysql -## 查看当前使用的数据库: -## mysql>select database(); -## mysql>status; -## mysql>show tables; -## mysql>show databases;//可以查看有哪些数据库,返回数据库名(databaseName) -## mysql>use databaseName;  //更换当前使用的数据库 -## mysql>show tables; //返回当前数据库下的所有表的名称 -## 或者也可以直接用以下命令 -## mysql>show tables from databaseName;//databaseName可以用show databases得来 -## mysql查看表结构命令,如下: -## desc 表名; -## show columns from 表名; -## 或者 -## describe 表名; -## show create table 表名; -## 或者 -## use information_schema -## select * from columns where table_name='表名'; -## 查看警告: -## Rows matched: 1  Changed: 0  Warnings: 1 -## mysql> show warnings; - > 来自 <[http://database.51cto.com/art/201011/234471.htm](http://database.51cto.com/art/201011/234471.htm)> +# 检查状态 +sudo systemctl status mysql +# 开机自启 +sudo systemctl enable mysql +``` -![mysql use wordpress Database changed mysql show ta...](Exported%20image%2020260407231457-2.png) ![4. 4. aptget install mysqlserver aptget install ph...](Exported%20image%2020260407231502-3.png) +--- -4]如何创建和删除一个数据库? +## 移动数据目录 -比如我要创建一个名为linux的数据库,应该运行如下命令 +将 `/var/lib/mysql` 移动到 `/home/data/mysql`: -mysql> create database [数据库名]; +### 1. 创建目标目录 -所以我们应该运行如下的命令,来创建名为linux的数据库 +```bash +cd /home +sudo mkdir -p data +``` -mysql> create database linux; -Query OK, 1 row affected (0.00 sec) +### 2. 停止 MySQL -是不是建好了呢??肯定是建好了,因为都有OK了:) +```bash +sudo systemctl stop mysql +``` -查看是不是有linux这个数据库了呢? +### 3. 移动数据 -代码: -mysql> show databases; -+----------+ -| Database | -+----------+ -| linux | -| mysql | -| test | -+----------+ -3 rows in set (0.00 sec) +```bash +sudo mv /var/lib/mysql /home/data/mysql +``` -那我们如何删除一个数据库呢?? -mysql> drop database [数据库名]; +### 4. 修改配置文件 -比如我们要把刚才创建的linux数据库删除,应该用下面的命令; -mysql> drop database linux; -Query OK, 0 rows affected (0.00 sec) +```bash +sudo vim /etc/mysql/my.cnf +``` -是不是已经删除了呢?? +```ini +[mysqld] +datadir = /home/data/mysql +socket = /home/data/mysql/mysql.sock +``` -代码: -mysql> show databases; -+----------+ -| Database | -+----------+ -| mysql | -| test | -+----------+ -2 rows in set (0.00 sec) +### 5. 修改启动脚本 -5]如何操作一个数据库呢,这个问题就比较多了,建议还是看一下mysql的手册吧。里面的东西太多了。如果操作一个数据库,首先是要指定一个数据库为当前数据库,应该用use命令 +```bash +sudo vim /etc/init.d/mysql +``` -mysql>use [数据库]; +找到 `datadir=/var/lib/mysql` 改为 `datadir=/home/data/mysql` -比如我想指定linux这个数据库为当前数据库,应该是 +### 6. 重启 MySQL -mysql> use linux; -Database changed +```bash +sudo systemctl restart mysql +``` -6]如何备份数据库?? +--- -比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump +## 配置 InnoDB 存储引擎 -命令格式如下: +```bash +sudo vim /etc/mysql/my.cnf +``` -shell> mysqldump -uroot -p linux > /root/linux.sql -Enter password:在这里输入数据库的密码 +在 `[mysqld]` 下添加: +```ini +default-storage-engine = INNODB +``` -通过上面的命令,我们要明白两件事,首先备份数据库是要以数据库管理员的身份备份;其次:备份目的地是/root,备份的文件名是linux.sql。其实备份的位置和文件名,根据自己的情况来定。文件名可以自己来取,路径也可以自己来安排; +重启 MySQL: +```bash +sudo systemctl restart mysql +``` -比如我想把linux的数据库备份到/home/beinan,数据库的文件名为linuxsir031130.sql,所以应该输入如下的命令。 -shell> mysqldump -uroot -p linux > /home/beinan/linuxsir031130.sql -Enter password:在这里输入数据库管理员root的数据库密码 +验证: +```sql +SHOW ENGINES; +``` -这样我们到/home/beinan目录下就能发现mysql中名为linux的数据库的备份文件linuxsir031130.sql +--- -综上所述,我们学习时要学会变通。:):) +## 大小写敏感配置 -5]如何把把备份的数据库导入到数据库中? +```bash +sudo vim /etc/mysql/my.cnf +``` -首先我们还是要操作上面几个过程,比如添加数据库管理员(如果您没有添加过mysql数据库管理员的话),创建数据库等。 +在 `[mysqld]` 下添加: +```ini +# 0 = 区分大小写 +# 1 = 不区分大小写 +lower_case_table_names = 1 +``` -比如我们要把在/home/beinan这个目录中的linuxsir031130.sql这个备份,导入名为linux的数据库中,应该如下操作; +重启 MySQL 生效。 -shell> mysql -uroot -p linux < /home/beinan/linuxsir031130.sql -Enter password:在这里输入密码 +--- -如果机器好,数据库比较小,几分钟就好了。 +## 常用管理操作 -6]其它一些比较常用的mysql指令; +### 连接 MySQL -查看状态 -mysql> show status; +```bash +mysql -u root -p +``` -查看进程 - -代码: -mysql> show processlist; -+----+------+-----------+------+---------+------+-------+------------------+| Id | User | Host | db | Command | Time | State | Info | -+----+------+-----------+------+---------+------+-------+------------------+| 16 | root | localhost | NULL | Query | 0 | NULL | show processlist | -+----+------+-----------+------+---------+------+-------+------------------+ -1 row in set (0.00 sec) - -查看表,应该先指定一个数据库为当前数据库;比如是名为linux的数据库; - -mysql>use linux; -mysql> show tables; -Empty set (0.00 sec) - -7]对mysql数据库常用命令的一点补充; - -几个常用的mysql相关的管理命令 - -mysql 命令:基本文本的,显示和使用的mysql数据库。前面已经简单的提过用法;比如登录等。 - -mysqladmin 命令,用来创建和维护mysql数据库的命令,前面已经简单的提过; - -isamchk 是用来修复、检查和优化.ism后缀的数据库文件; - -mysqldump 是用于备份数据库,前面已经简单的说明过; - -myisamchk 用来修复.myi后缀的数据库文件; - -比如我们要检查名为linux的数据库.myi数据库表是否存在问题,应该用下面的命令; - -要把mysqld服务器停下来 -shell> ../share/mysql.server stop - -然后执行 -shell> myisamchk ../var/linux/*.MYI - -上面的命令的意思就是检查所有的.myi文件,数据库的目录在../var/linux/目录中 - -如果有问题,应该用-r参数来修复 -shell> myisamchk -r ../var/linux/*.MYI - -6]mysqlshow 命令:显示用户选择的数据库和表 -shell> mysqlshow -uroot -p [数据库名] - -比如我要查看名为linux的数据库;应该是: - -shell> mysqlshow -uroot -p linux - -好了,到这里,你可能已经知道命令行下的所有基本操作了~ - -ps:补充一个。。 - -更改ROOT帐号名。 +### 常用 SQL ```sql -update set user="新名字" where user="旧名字"; +-- 查看数据库 +SHOW DATABASES; + +-- 创建数据库 +CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- 选择数据库 +USE dbname; + +-- 查看用户 +SELECT user, host FROM mysql.user; + +-- 创建用户 +CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; + +-- 授权 +GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost'; +FLUSH PRIVILEGES; ``` - > 来自 <[http://blog.csdn.net/princewong/article/details/2003658](http://blog.csdn.net/princewong/article/details/2003658)> \ No newline at end of file + +--- + +## 卸载 MySQL + +```bash +# Ubuntu +sudo apt-get autoremove --purge mysql-server +sudo apt-get remove mysql-server +sudo apt-get autoremove mysql-server +sudo apt-get remove mysql-common + +# 清理残留 +dpkg -l | grep ^rc | awk '{print $2}' | sudo xargs dpkg -P +``` + +--- + +## 重置 root 密码 + +```bash +# 1. 停止 MySQL +sudo systemctl stop mysql + +# 2. 安全模式启动 +sudo mysqld_safe --skip-grant-tables & + +# 3. 无密码登录 +mysql -u root + +# 4. 修改密码 +FLUSH PRIVILEGES; +ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; +FLUSH PRIVILEGES; +EXIT; + +# 5. 重启 +sudo systemctl restart mysql +``` + +--- + +## 备份与恢复 + +```bash +# 备份 +mysqldump -u root -p dbname > backup.sql + +# 恢复 +mysql -u root -p dbname < backup.sql +``` + +--- + +> 💡 **提示**:定期备份数据库,使用 `mysqldump`。 diff --git a/Linux/CentOS/CentOS调整分区大小.md b/Linux/CentOS/CentOS调整分区大小.md index 656781b..11e8927 100755 --- a/Linux/CentOS/CentOS调整分区大小.md +++ b/Linux/CentOS/CentOS调整分区大小.md @@ -1,88 +1,141 @@ -**CentOS 7 调整 home分区 扩大 root分区** +# CentOS 调整分区大小 -2. 查看分区 +> 将 /home 分区空间调整到 /root 分区 -`df -h (centos-home`**和**`centos-root`**每人的名字可能不一样** +--- -``` -``` -) vgdisplay ( +## 1. 查看当前分区 + +```bash +df -h ``` -``` -**查看空闲磁盘大小)**`` - -4. 备份home分区文件 - -``` -``` -tar cvf /tmp/home.tar /home +```bash +vgdisplay ``` -``` -6. 卸载/home,如果无法卸载,先终止使用/home文件系统的进程 +查看空闲磁盘大小(`Free PE / Size`) -`umount /home` **(卸载)** +--- +## 2. 备份 home 分区 + +```bash +tar cvf /tmp/home.tar /home ``` -``` - + +--- + +## 3. 卸载 /home + +如果无法卸载,先终止使用 /home 的进程: + +```bash fuser -km /home/ +umount /home ``` -``` -**(终止)**`` +--- -8. 删除/home所在的lv +## 4. 删除 home 所在的 LV -``` -``` -lvremove /dev/mapper/centos-home +```bash +lvremove /dev/mapper/centos-home ``` -``` -10. 扩展/root所在的lv +> ⚠️ 确认已备份! -``` -``` -lvextend -L +50G /dev/mapper/centos-root +--- + +## 5. 扩展 root 所在的 LV + +```bash +# 扩展 50GB(根据实际空闲空间调整) +lvextend -L +50G /dev/mapper/centos-root ``` -``` -12. 扩展/root文件系统 +--- -``` -``` -xfs_growfs /dev/mapper/centos-root +## 6. 扩展 root 文件系统 + +```bash +# XFS 文件系统 +xfs_growfs /dev/mapper/centos-root + +# 如果是 ext4: +# resize2fs /dev/mapper/centos-root ``` -``` -14. 重新创建home lv +--- -``` -``` -lvcreate -L 50G -n /dev/mapper/centos-home +## 7. 重新创建 home LV + +```bash +# 创建 50GB 的 home(根据实际需求调整) +lvcreate -L 50G -n /dev/mapper/centos-home ``` -``` -16. 创建文件系统 +--- -``` -``` -mkfs.xfs /dev/mapper/centos-home +## 8. 创建文件系统 + +```bash +mkfs.xfs /dev/mapper/centos-home ``` -``` -18. 挂载home +--- -``` -``` -mount /dev/mapper/centos-home +## 9. 挂载 home + +```bash +mount /dev/mapper/centos-home ``` -``` -20. home文件恢复 +--- -`tar xvf /tmp/home.tar -C /home/` - > 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)> - > 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)> \ No newline at end of file +## 10. 恢复 home 文件 + +```bash +tar xvf /tmp/home.tar -C /home/ +``` + +--- + +## 完整流程 + +```bash +# 1. 备份 +tar cvf /tmp/home.tar /home + +# 2. 卸载 +umount /home +# 或强制终止 +fuser -km /home/ + +# 3. 删除旧 LV +lvremove /dev/mapper/centos-home + +# 4. 扩展 root LV +lvextend -L +50G /dev/mapper/centos-root + +# 5. 扩展文件系统 +xfs_growfs /dev/mapper/centos-root + +# 6. 创建新 home LV +lvcreate -L 50G -n /dev/mapper/centos-home + +# 7. 创建文件系统 +mkfs.xfs /dev/mapper/centos-home + +# 8. 挂载 +mount /dev/mapper/centos-home + +# 9. 恢复 +tar xvf /tmp/home.tar -C /home/ +``` + +--- + +> ⚠️ **操作前务必备份数据!** + +> 参考:[CentOS 分区调整](https://www.jianshu.com/p/27c87f390175) diff --git a/Linux/MySQL/MySQL用户权限设置.md b/Linux/MySQL/MySQL用户权限设置.md index 40240ca..666a546 100755 --- a/Linux/MySQL/MySQL用户权限设置.md +++ b/Linux/MySQL/MySQL用户权限设置.md @@ -1,28 +1,164 @@ -## 关于**==mysql**==的用户管理,笔记 +# MySQL 用户权限设置 -## 1====、创建新用户 -## 通过**==root**==用户登录之后创建 -## >>** **grant all privileges on *.* to** **testuser**==@localhost identified by** **"123456"** **;**  **//**  **创建新用户,用户名为****testuser****,密码为****123456** ==; -## >>** **grant all privileges on *.* to** **testuser**==@localhost identified by** **"123456"** **;**  **//**  **设置用户****testuser****,可以在本地访问**==mysql -## >>** **grant all privileges on *.* to** **testuser**==@"%" identified by** **"123456"** **;**   **//**  **设置用户****testuser****,可以在远程访问**==mysql -## >>** **flush privileges** **;**  **//**  **mysql** **新设置用户或更改密码后需用**==flush privileges****刷新****MySQL****的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动****mysql**==服务器,来使新设置生效 -## 2====、设置用户访问数据库权限 -## >>** **grant all privileges on** **test_db.*** **to** **testuser@localhost identified by "123456" ;**  **//**  **设置用户**==testuser****,只能访问数据库****test_db****,其他数据库均不能访问** ==; -## >>** **grant all privileges on** ***.*** **to** **testuser@localhost identified by "123456" ;**  **//**  **设置用户**==testuser****,可以访问****mysql****上的所有数据库** ==; -## >>** **grant all privileges on** **test_db.user_infor** **to** **testuser@localhost identified by "123456" ;**  **//**  **设置用户**==testuser****,只能访问数据库****test_db****的表****user_infor****,数据库中的其他表均不能访问** ==; -## 3====、设置用户操作权限 -## >>** **grant** **all privileges** **on *.* to** **testuser@localhost identified by "123456" WITH GRANT OPTION** **;**  **//**==设置用户****testuser****,拥有所有的操作权限,也就是管理员** ==; -## >> grant** **select** **on *.* to** **testuser@localhost identified by "123456" WITH GRANT OPTION** **;**  **//**==设置用户****testuser****,只拥有【查询】操作权限** ==; -## >>** **grant** **select,insert** **on *.* to** **testuser@localhost identified by "123456"**  **;**  **//**==设置用户****testuser****,只拥有【查询****\****插入】操作权限** ==; -## >>** **grant** **select,insert,update,delete** **on *.* to** **testuser@localhost identified by "123456"**  **;**  **//**==设置用户****testuser****,只拥有【查询****\****插入】操作权限** ==; -## >>** **REVOKE** **select,insert** **ON what FROM** **testuser**==//****取消用户****testuser****的【查询****\****插入】操作权限** ==; -## 4====、设置用户远程访问权限 -## >>** **grant all privileges on *.* to** **testuser@**==“192.168.1.100”** **identified by** **"123456"** **;**  **//****设置用户****testuser****,只能在客户端****IP****为****192.168.1.100****上才能远程访问****mysql** ==; -## 5**==、关于****root**==用户的访问设置 -## 设置所有用户可以远程访问**==mysql****,****修改****my.cnf****配置文件,将****bind-address = 127.0.0.1****前面加****“#”****注释掉****,这样就可以允许其他机器远程访问本机****mysql**==了; -## >>** **grant all privileges on *.* to** **root@"%" identified by** **"123456"** **;**   **//**  **设置用户**==root****,可以在远程访问**==mysql -## >>** **select host,user from user;**   **//**==查询****mysql**==中所有用户权限 -## 关闭**==root**==用户远程访问权限 -## >>** **delete from user where user="root" and host="%" ;**  **//**==禁止****root****用户在远程机器上访问**==mysql -## >>** **flush privileges** **;**  **//**==修改权限之后,刷新****MySQL**==的系统权限相关表方可生效 - > 来自 <[https://www.cnblogs.com/candle806/p/4048651.html](https://www.cnblogs.com/candle806/p/4048651.html)> \ No newline at end of file +> MySQL 用户创建、授权、管理 + +--- + +## 连接 MySQL + +```bash +mysql -u root -p +``` + +--- + +## 1. 创建新用户 + +```sql +-- 创建用户(本地访问) +GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password'; + +-- 创建用户(远程访问) +GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'; + +-- 刷新权限 +FLUSH PRIVILEGES; +``` + +--- + +## 2. 设置数据库访问权限 + +```sql +-- 只能访问指定数据库 +GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'localhost' IDENTIFIED BY 'password'; + +-- 访问所有数据库 +GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password'; + +-- 只能访问指定表的某列 +GRANT SELECT ON mydb.users TO 'username'@'localhost'; +``` + +--- + +## 3. 设置操作权限 + +| 权限 | 说明 | +|------|------| +| ALL PRIVILEGES | 所有权限 | +| SELECT | 查询 | +| INSERT | 插入 | +| UPDATE | 更新 | +| DELETE | 删除 | +| CREATE | 创建 | +| DROP | 删除 | +| WITH GRANT OPTION | 可授权 | + +```sql +-- 授予所有权限(管理员) +GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; + +-- 只授予查询权限 +GRANT SELECT ON *.* TO 'username'@'localhost'; + +-- 授予查询和插入权限 +GRANT SELECT, INSERT ON *.* TO 'username'@'localhost'; + +-- 授予增删改查权限 +GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'username'@'localhost'; +``` + +--- + +## 4. 撤销权限 + +```sql +REVOKE SELECT, INSERT ON *.* FROM 'username'@'localhost'; +FLUSH PRIVILEGES; +``` + +--- + +## 5. 设置远程访问权限 + +```sql +-- 允许指定 IP 访问 +GRANT ALL PRIVILEGES ON *.* TO 'username'@'192.168.1.100' IDENTIFIED BY 'password'; + +-- 允许所有 IP 访问 +GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'; +``` + +### 配置文件修改 + +```bash +sudo vim /etc/mysql/my.cnf +``` + +注释掉绑定地址: +```ini +# bind-address = 127.0.0.1 +``` + +重启 MySQL: +```bash +sudo systemctl restart mysql +``` + +--- + +## 6. Root 用户管理 + +```sql +-- 查看所有用户 +SELECT user, host FROM mysql.user; + +-- 允许 root 远程访问 +GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; +FLUSH PRIVILEGES; + +-- 禁止 root 远程访问 +DELETE FROM mysql.user WHERE user='root' AND host='%'; +FLUSH PRIVILEGES; +``` + +--- + +## 7. 删除用户 + +```sql +DROP USER 'username'@'localhost'; +``` + +--- + +## 8. 查看用户权限 + +```sql +SHOW GRANTS FOR 'username'@'localhost'; +``` + +--- + +## 常用示例 + +```sql +-- 创建开发用户 +CREATE USER 'dev'@'localhost' IDENTIFIED BY 'dev_password'; +GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'dev'@'localhost'; +FLUSH PRIVILEGES; + +-- 创建只读用户 +CREATE USER 'reader'@'%' IDENTIFIED BY 'read_password'; +GRANT SELECT ON myapp.* TO 'reader'@'%'; +FLUSH PRIVILEGES; + +-- 修改用户密码 +SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new_password'); +FLUSH PRIVILEGES; +``` + +--- + +> 参考:[MySQL 用户权限管理](https://www.cnblogs.com/candle806/p/4048651.html)