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的主要内容,如果未能解决你的问题,请参考以下文章

MySQLMySQL 一些 使用 案例

MySQL的常用操作更改root密码连接MySQLMySQL常用的命令

MySQLMysql必会语句

MySQLMysql必会语句

MySQLMysql必会语句

mysqlmysql优化