◆基础◆ MySQL数据库基本操作
◆登陆相关◆
mysql -u 用户名 -p 密码 -h 登陆地址 -P 端口 -s 套接字
◆用户相关◆
创建用户 create user '用户名' @ '授权方式' identified by '密码'; 注:授权方式有 <% 允许远程管理> <localhost 允许本地管理> <192.168.*.*允许指定IP管理> select Host,User,Password from mysql.user; #查询数据库用户 create user "用户名"@"授权方式" identified by "密码"; #创建用户 drop user "用户名"@"授权方式"; #删除用户 set password for "用户名"@"授权方式" = password("新密码"); #修改密码 set password=password("123"); #修改登陆用户的密码 grant privileges on databasename.tablename to "username"@"host"; #授权用户 revoke privileges on database.tablename from "username"@"host" #撤销用户授权 ========================================================================================== privileges: #表示要授予什么权力 all,select,insert,delete,update databasename.tablename #要授权的数据库.表 "username"@"host" #表示授权给哪个用户。 ==========================================================================================
◆修改密码◆
mysqladmin -u root password 密码 #设置初始化密码 set password=password( "密码"); #修改登陆用户的密码 set password for '用户名'@'登陆地址'=password('密码'); #修改密码并赋予权限
◆ROOT密码找回◆
a)关闭数据库
systemctl stop mysqld
b)修改主配置文件(/etc/my.cnf),在Mysqld区域添加以下↓纪录
skip-grant-table
c)重启数据库
systemctl restart mysqld
d)直接登陆数据库
mysql -u root
e)执行命令,修改root的登陆密码
update mysql.user set password=password("123123") where user='root';
f)将主配置文件的skip-grant-table属性去掉即可
skip-grant-table
◆基础SQL语句◆ >增 删 改 查<
增加 create database 数据库名 #创建数据库 create table 表名 (字段值 字段类型) #创建表 例: mysql> create table 表名 ( -> Uid int unsigned not null auto_increment, #Uid,无符号型,不允许空,自增长 -> Uname char(20) not null default '??', #Uname,字符型,不允许空,默认?? -> Uage int not null default '0', #Uage,整形,不允许空,默认0 -> primary key(Uid)); #设置主键Uid insert into 表名 (字段值) values (插入的数据); #向表中插入数据 删除 drop database 数据库名 #删除数据库 drop table 表名 #删除表 delete from 表名 where 字段=数值; #删除表中指定字段等于数值的记录 修改 update 表名 set 字段1=数值1 where 字段2=数值2 #更新字段1被更新字段2 update 表名 set 字段1=数值1 where 字段2 between 1 and 5; #更新表字段2,在1到5之间的所有字段1的数值为数值1 alter table 表1名 rename 表2名; #将表1名称修改为表2 名称 alter table 表名 modify 字段名 字段类型; #将表中字段数据类型 alter table 表名 drop 字段; #删除表中字段 alter table 表名 add 字段名 字段类型 first; #在表的最前面插入新字段 alter table 表名 add 字段名1 字段类型 after 字段名2 #在字段名2之后插入新字段 查询 show databases; #查看数据库 show tables; #查看数据表 describe 表名; #查看表结构
◆数据库授权◆
grant all on *.* to "root"@"%"; #授权一个已存在账号允许登陆最大权限 grant all on *.* to "lyshark"@" %" identified by "123"; #创建用户并授权远程登陆 show grants for "lyshark"@"%"; #查看lyshark用户的远程登陆权限 revoke create on *.* from "lyshark"@"%"; #取消lyshark用户的远程登陆权限
◆数据库备份与还原◆
数据库备份与还原 mysqldump -u root -p 数据库名 > 备份文件.sql #备份单个数据库 mysql -u root -p 数据库名 < 备份文件.sql #还原单个数据库 注意:以上↑备份方法并不会主动创建数据库,还原前应手动创建与原来相同的数据库 mysqldump -u root -p 数据库名 表名 > 备份文件.sql #备份数据库中单个表 mysql -u root -p 还原到的数据库名 < 备份文件.sql #还原数据库中单个表 mysqldump -u root -p --databases 数据库名 >备份文件.sql #备份指定的数据库 mysql -uroot -p < 备份文件.sql #还指定的数据库 注意:以上↑备份方会主动创建数据库,还原时无需手动创建与原来相同的数据库 mysqldump -u root -p --all-databases >备份文件.sql #备份整个数据库 mysql -u root -p <备份文件.sql #还原整个数据库 mysqlhotcopy --flushlog -u='root' -p='123123' --regexp=^w 备份文件保存位置 #以上↑解释 : 用户名 密码 备份开头是w的数据库 保存位置 MySQL dump 与 MySQL hotcopy 的区别 前者是一个SQL语句的集合 后者是快速稳健意义上的备份 前者可以使用MyISAM和InnoDB存储引擎 后者只支持MyISAM引擎 前者可以远程操作 后者只支持本地操作
◆案例1◆ MySQL 主-从 服务搭建
◆主从数据库都应执行的步骤◆
1.安装MySQL,设置初始密码,并启动服务
yum install -y mariadb mariadb-server systemctl restart mariadb mysql_secure_installation
2.修改MySQL主配置文件
编辑配置文件,在相应的区域追加写入以下内容
vim /etc/my.cnf [mysqld] log-bin=mysql-bin #开起二进制日志文件 server-id=12 #本台MySQL服务器ID(主从不能重复) systemctl restart mariadb #重启生效
◆主数据库执行◆
1.进入主数据库,授权从数据库登陆账号
grant replication slave on *.* to "用户名"@'%' identified by "密码"; #创建用于从服务器登陆的账号 show master status; #显示日志状态 MariaDB [(none)]> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 245 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
◆从数据库执行◆
1.进入从数据库
change master to master_host='服务器IP',master_user='授权账号',master_password='密码',master_log_file='日志文件',master_log_pos=文件位置; start slave; #启用同步 show slave status\G; #查看同步状态
注意:两个状态同时开启即可
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
◆案例2◆ MySQL 主-主 服务搭建
=============================================================================
注意:
由于是主主环境,两台主机互为主从,应反复再次做一遍操作
如果是主主主就要同时做操作
=============================================================================
◆两台数据库都应执行的步骤◆
1.两台服务器同时安装MySQL并初始化
yum install -y mariadb mariadb-server systemctl restart mariadb mysql_secure_installation
2.将MySQL1的数据拷贝到MySQL2上,实现数据的一致性
flush tables with read lock; #锁定数据表为只读模式 mysqldump -u root -p --all-databases >back.sql #备份数据库 scp back.sql root@192.168.1.13:/root #将数据传递到远程主机 unlock tables; #解除表锁定 mysql -uroot -p <back.sql #从数据库恢复数据
3.修改MySQL主配置文件(两台都要修改)
编辑配置文件,在相应的区域追加写入以下内容
vim /etc/my.cnf [mysqld] log-bin=mysql-bin #开启二进制日志 server-id=10 #指定服务器ID号(两台不允许重复) replicate-do-db=test #要同步的数据库 binlog-ignore-db=mysql #不需要同步的数据库 binlog-ignore-db=information_schema #不需要同步的数据库 auto-increment-increment=2 #每次自增长2 auto-increment-offset=1 #自增长从1开始
systemctl restart mariadb
◆第一台数据库应执行的步骤◆
1.进入MySQL主数据库,创建从数据库登陆的账号
grant replication slave on *.* to '用户名'@'%' identified by '密码'; #创建用于从数据库登陆的用户 show master status; #查看二进制文件名
◆第二台数据库应执行的步骤◆
1.进入MySQL从数据库,指定登陆的账号地址等信息.
change master to master_host='主服务器IP',master_user='授权账号',master_password='密码',master_log_file='二进制文名',master_log_pos=文件空间大小; start slave; #启动同步功能 show slave status\G; #查看同步状态
◆第二台数据库应执行的步骤◆
1.进入MySQL主数据库,创建从数据库登陆的账号
grant replication slave on *.* to '用户名'@'%' identified by '密码'; #创建用于从数据库登陆的用户 show master status; #查看二进制文件名
◆第一台数据库应执行的步骤◆
2.进入MySQL从数据库,指定登陆的账号地址等信息.
change master to master_host='主服务器IP',master_user='授权账号',master_password='密码',master_log_file='二进制文名',master_log_pos=文件空间大小; start slave; #启动同步功能 show slave status\G; #查看同步状态
◆案例3◆ MySQL 主-主-从 服务搭建
◆主数据库应执行的步骤◆
1.两台主服务器都需要安装MySQL初始化并设置密码
yum install -y mariadb mariadb-server systemctl restart mariadb mysql_secure_installation
2.两台主服务器都应配置一下内容(两台主MySQL都需要配置)
vim /etc/my.cnf #修改配置文件 写入以下内容↓ log-bin=mysql-bin #开启二进制日志 server-id=147 #服务器ID号 systemctl restart mariadb #重启服务
3.登陆主MySQL并创建用户从服务器登陆的用户 (两台主MySQL都需要配置)
mysql -uroot –p #登陆MySQL grant replication slave on *.* to '授权用户'@'%' identified by '密码'; #创建从服务器用户 show master status; #显示日志状态
◆从数据库应执行的步骤◆ 切记此MySQL不能启动
1.修改从MySQL主配置文件
vim /etc/my.cnf 写入以下内容↓ [mysqld_multi] mysqld=/usr/bin/mysqld_safe mysqladmin=/usr/bin/mysqladmin log=/tmp/multi.log [mysqld147] #名称后面加数字,后期启动用(不应相同) port=3306 #端口号(不应相同) pid-file=/var/lib/mysqla/mysqld.pid #MySQL进程号保存位置 datadir=/var/lib/mysqla #数据文件保存位置 socket=/var/lib/mysqla/mysql.sock #指定登陆套接字 server-id=110 #ID号,同一主从环境不能相同 user=mysql #MySQL登陆用户名 [mysqld148] #名称后面加数字,后期启动用(不应相同) port=3307 #端口号(不应相同) pid-file=/var/lib/mysqlb/mysqld.pid #MySQL进程号保存位置 datadir=/var/lib/mysqlb #数据文件保存位置 socket=/var/lib/mysqlb/mysql.sock #指定登陆套接字 server-id=110 #ID号,同一主从环境不能相同 user=mysql #MySQL登陆用户名
2.初始化数据库
mysql_install_db --datadir=/var/lib/mysqla --user=mysql #初始化数据库 mysql_install_db --datadir=/var/lib/mysqlb --user=mysql #初始化数据库
3.给相应目录赋予权限
cd /var/lib/ chown -R mysql:mysql /var/lib/mysqla/ #修改文件权限 chown -R mysql:mysql /var/lib/mysqlb/ #修改文件权限
4.启动相应服务器
mysqld_multi --defaults-file=/etc/my.cnf start 147 #开启147服务器 mysqld_multi --defaults-file=/etc/my.cnf start 148 #开启148服务器
5.登陆147和148数据库确定主从关系
mysql -P 3306 -S /var/lib/mysqla/mysql.sock #登陆147数据库 mysql -P 3306 -S /var/lib/mysqlb/mysql.sock #登陆148数据库
change master to master_host='服务器IP',master_user='授权账号',master_password='密码',master_log_file='日志文件',master_log_pos=文件位置; start slave; #启用同步 show slave status\G; #查看同步状态