MySQL
Posted lyshark
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL相关的知识,希望对你有一定的参考价值。
**************************************************************************************************
◆基础◆ mysql数据库基本操作
**************************************************************************************************
****************************************************************************
◆登陆相关◆
****************************************************************************
mysql -u 用户名 -p 密码 -h 登陆地址 -P 端口 -s 套接字
****************************************************************************
◆用户相关◆
****************************************************************************
创建用户
create user ‘用户名‘ @ ‘授权方式‘ identified by ‘密码‘;
注:授权方式有 <% 允许远程管理> <localhost 允许本地管理> <192.168.*.*允许指定IP管理>
修改密码
mysqladmin -u root password 密码 #设置初始化密码
set password=password( "密码"); #修改登陆用户的密码
set password for ‘用户名‘@‘登陆地址‘=password(‘密码‘); #修改密码并赋予权限
密码找回
a)关闭数据库
service mysqld stop
b)修改主配置文件(/etc/my.cnf),在Mysqld区域添加以下↓纪录
skip-grant-table
c)重启数据库
service mysqld start
d)直接登陆数据库
mysql -u root
e)执行命令,修改root的登陆密码
update mysql.user set password=password("123123") where user=‘root‘;
f)将主配置文件的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 [email protected]:/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; #查看二进制文件名
****************************************************************************
◆第一台数据库应执行的步骤◆
****************************************************************************
5.进入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; #查看同步状态
以上是关于MySQL的主要内容,如果未能解决你的问题,请参考以下文章