mysql基础命令3

数据库基本操作

1.给数据库设置密码
mysqladmin -uroot password 1
2.登录
mysql -uroot -p1
mysql -uroot -p1 -hlocalhost
mysql -uroot -p1 -h10.0.0.51		#没有这样权限的用户
mysql -uroot -p 1	#中间不能有空格
mysql -uroot --p1 mysql		#直接进入库
mysql -u root -p		#规范的登录方式,使用交互式登录,更安全
3.查看数据库用户
MariaDB [(none)]> select user,host from mysql.user;
MariaDB [(none)]> use wp; 		#切换数据库
4.优化,删除多余的用户
drop user root@'::1';
delete from user where 1=1;	#删除mysql所有用户,重启后数据库报废
delete from mysql.user;
desc user;
mysqladmin -uroot -p shutdown
select * from mysql.user\G		#以列排列
status;
mysql -uroot -p1 -e 'show databases;'

#表
创建表
creat tables tables_name;
创建数据表的命令前需要使用use指明你要使用的数据库
来更改数据表名

alter table old_name rename to new_name或rename table old_name to new_name 
通过命令alter table table_name add column_name column_type;语句来为数据表增加字段。 
通过命令alter table table_name change column_name new_column_name new_column_name_type;语句来修改数据表字段名称。 
通过命令alter table table_name drop column_name;来删除数据表字段。

#库
如果想要重命名一个数据库名称的话,需要先导出原有数据库中的所有数据,然后新建一个数据库,然后把导出的数据导入到新的数据库中,最后删掉原来的数据库。

pycharm里面写MySQL的命令了,同理Java的IDEA也可以写。

二进制指定目录安装
[root@db03 ~]# mysql -V
mysql  Ver 14.14 Distrib 5.6.46, for linux-glibc2.12 (x86_64) using  EditLine wrapper
源码安装
[root@db04 ~]# mysql -V
mysql  Ver 14.14 Distrib 5.6.46, for Linux (x86_64) using  EditLine wrapper


img

企业误删除用户(5.6或者5.7版本)

delete from mysql.user where 1=1;  
#删除mysql所有用户,删除用户以后还是可以登陆,但是不要重启

解决方式:
1.停止数据库
systemctl stop mysqld
2.跳过授权表和网络启动
mysqld_safe --skip-grant-tables --skip-networking &
3.添加用户
insert into mysql.user values ('localhost','root',PASSWORD('123'),
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'',
'',
'',
'',0,0,0,0,'mysql_native_password','','N');

#重启数据库
[root@db02 scripts]# mysqladmin shutdown
200709 16:27:19 mysqld_safe mysqld from pid file /usr/local/mysql/data/db02.pid ended
[1]+  Done                    mysqld_safe --skip-grant-tables --skip-networking
[root@db02 scripts]# systemctl start mysqld

解决方法二

1.停止数据库
systemctl stop mysql
2.跳过授权表和网络启动
mysqld_safe --skip-grant-tables --skip-networking &
3.授权一个新用户
flush privileges;	#刷新授权表
grant all on *.* to root@'localhost' identified by '123' with grant option;

或者
3.
mysqld --skip-grant-tables   
mysql> use mysql;   --连接权限数据库
mysql> update user set password=password("新密码") where user="root";   -- 改密码
mysql> quit;    -- 退出mysql

mysql体系结构管理

1.客户端和服务端模型

数据库是一个典型的CS结构的服务

1.mysql自带的客户端工具
mysql
mysqladmin
mysqldump
2.mysqld是一个二进制程序,后台的守护进程
单进程
多线程

2.mysql的连接方式

1.tcp/ip(有 -h)
	mysql -uroot -p -h127.0.0.1
	mysql -uroot -p -h127.0.0.1 -S/tmp/mysql.sock

2.socket
	mysql -uroot -p
	mysql -uroot -p -hlocalhost
	mysql -uroot -p -S/var/lib/mysql/mysql.sock
	
#有 -h 就是tcp/ip连接,除了-hlocalhost
#默认socket连接,速度快,tcp/ip有三次握手,四次挥手
#如果你不指定主机名或如果你指定特殊的主机名localhost,使用Unix套接字
#socket连接只能在本机连接,tcp可以远程连接

[root@db01 ~]# find / -name "mysql.sock"
/var/lib/mysql/mysql.sock

对mysql.sock来说,其作用是程序与mysql-server处于同一台机器,发起本地连接时可用。
例如你无须定义连接host的具体IP,只要为空或localhost就可以

如果套接字文件被删除了,本地客户就不能连接,重启服务器重新创建

mysql.sock路径
[mysqld]
socket=/usr/local/var/mysql.sock
[client]
socket=/usr/local/var/mysql.sock

mysql.sock的保护
chmod +t /tmp

当前主机名被代替进mysqladmin命令中,注意hostname命令使用反引号“`”而非正引号“ '”
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host ' version
shell> mysqladmin --socket=/tmp/mysql.sock version

3.mysql数据库的实例构成

1.MySQL的后台进程+线程+预分配的内存结构。
2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。
 

mysql程序构成

1.连接层
	验证用户身份,判断用户名和密码
	提供2中连接方式(协议,tcp/ip socket)
	与sql层建立交互的线程(mysql -uroot -p1 -e 'show databases;',库外交互)
2.sql层
	接受连接层传过来的数据(sql语句)
	判断sql语句语法
	判断sql语句的语义
	解析sql语句,生成执行计划 
	优化器,选出执行计划中最优的计划
	执行器,执行计划
		与存储引qin层建立交互
		将优化后要执行的sql发给存储引qin层
		将数据以表格的形式存储,交给存储引qin层
	记录缓存,如果数据库前端有Redis,将数据缓存至Redis
	记录日志(bin-log日志,数据库有很多日志)
3.存储引qin层
	与sql层建立交互,接受sql层传输的sql语句
	与磁盘进行交互,获取数据,将数据返回sql层

mysql数据库的逻辑结构

1.库有表组成,库下只有表
表:元数据+真实数据行
2.use 库;切换库
3.元数据就是表头,列+其它属性(行数+占用空间大小+权限)
4.真实数据,真实存在于数据
5.临时数据,为了方便查看真实数据
6.列:列名字+数据类型+其他约束(非空、唯一、主键、非负数、自增长、默认值)
MySQL Linux
目录
show databases; ls-l /
use mysql cd /mysql
文件
show tables; ls
二维表=元数据+真实数据行 文件=文件名+文件属性

mysql物理结构

1.MySQL的最底层的物理结构是数据文件,也就是说,存储引擎层,打交道的文件,是数据文件。

2.存储引擎分为很多种类(Linux中的FS)(innodb )

3.不同存储引擎的区别:存储方式、安全性、性能

#数据库创建时,无论库名还是表名,最好用小写字母
#Linux识别大小写,可以设置数据库不识别大小写(lower_case_table_names=1)
#Windows不识别大小写
#windows系统数据库管理工具,有的识别大小写,有的不识别大小写
#大小写混乱可能会导致数据库误删除

mysql物理大小

1、段:理论上一个表就是一个段,由多个区构成,(分区表是一个分区一个段)
2、区:连续的多个页构成(>1页)
3、页:最小的数据存储单元,默认是16k(页)

mysql多实例

#mysql多实例,也是多个配置文件启动数据库

mysql多配置文件:
1.多个端口
2.多个socket文件
3.多个日志文件
4.多个server id(唯一性)
5.多个数据目录

多实例步骤

1.创建目录
mkdir /service/{3307..3309}
2.编辑配置文件
[root@db03 service]# vim 3307/my.cnf 
[mysqld]
basedir = /service/mysql
datadir = /service/3307/data
port=3307
socket=/service/3307/mysql.sock
server_id=1
log_err=/service/3307/data/mysql.err
log_bin=/service/3307/data/mysql-bin
character_set_server=utf8
skip_name_resolve

[root@db03 ~]# vim /service/3308/my.cnf 
[mysqld]
basedir = /service/mysql
datadir = /service/3308/data
port=3308
socket=/service/3308/mysql.sock
server_id=2
log_err=/service/3308/data/mysql.err
log_bin=/service/3308/data/mysql-bin
character_set_server=utf8
skip_name_resolve

[root@db03 ~]# vim /service/3309/my.cnf 
[mysqld]
basedir = /service/mysql
datadir = /service/3309/data
port=3309
socket=/service/3309/mysql.sock
server_id=3
log_err=/service/3309/data/mysql.err
log_bin=/service/3309/data/mysql-bin
character_set_server=utf8
skip_name_resolve

查看数据库唯一性
[root@db03 service]# cat mysql/data/auto.cnf 
[auto]
server-uuid=e67cd0f9-c2b1-11ea-9dc3-000c299148b7

3.初始化
[root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3307/data
[root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3308/data
[root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data

查看数据库目录结构
[root@db03 service]# tree -L 3 3307

4.授权
[root@db03 service]# chown mysql. -R /service/{3307..3309}

5.启动多实例
[root@db03 service]# mysqld_safe --defaults-file=/service/3307/my.cnf &
[root@db03 service]# mysqld_safe --defaults-file=/service/3308/my.cnf &
[root@db03 service]# mysqld_safe --defaults-file=/service/3309/my.cnf &

6.连接多实例
mysql -S /service/3307/mysql.sock
mysql -S /service/3308/mysql.sock
mysql -S /service/3309/mysql.sock

验证
mysql -S /service/3307/mysql.sock -e "show variables like 'server_id'"
mysql -S /service/3308/mysql.sock -e "show variables like 'server_id'"
mysql -S /service/3309/mysql.sock -e "show variables like 'server_id'"

7.
#设置密码
mysqladmin -S /service/3307/mysql.sock -uroot password '1'
mysqladmin -S /service/3308/mysql.sock -uroot password '1'
mysqladmin -S /service/3309/mysql.sock -uroot password '1'

#同时指定使用两种方式连接
mysql -S /service/3307/mysql.sock -uroot -p1
mysql -S /service/3308/mysql.sock -uroot -p1
mysql -S /service/3309/mysql.sock -uroot -p1

8.设置简单的连接方式
vim /usr/bin/mysql3307
mysql -S /service/3307/mysql.sock -uroot -p1
vim /usr/bin/mysql3308
mysql -S /service/3308/mysql.sock -uroot -p1
vim /usr/bin/mysql3309
mysql -S /service/3309/mysql.sock -uroot -p1
chown +x /usr/bin/mysql330{7..9}

连接
mysql3307
mysql3308
mysql3309

主从复制

1.mysql单节点
2.mysql主从复制
IO线程负责连接主库,拿数据
SQL线程负责执行
3.MHA
至少3台,node node node manager
4.atlas读写分离
至少4台
atlas keepalived

#同步数据之前查看bin-log,最小为120

数据库多实例复制

主库

1.开启bin-log,pos位置点
[mysqld]
basedir = /service/mysql
datadir = /service/3307/data
port=3307
socket=/service/3307/mysql.sock
server_id=1
log_err=/service/3307/data/mysql.err
log_bin=/service/3307/data/mysql-bin

2.主库授权用户,用来给从库,用来连接主库
mysql> create user rep;
mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '1';
3.查看主库信息
mysql> show master status ;
查看用户
mysql> select user,host from mysql.user;
查看用户密码
mysql> select user,password from mysql.user;

从库

1.值不能加''
master_log_pos=xx,
master_port=3307
#值不是纯数字的话不用加引号,是纯数字的话需要加引号

#用户名必须是字符串,不能直接是纯数字,在纯数字加引号可以使纯数字变成字符串
create user '123'@'localhost';
1.配置主从复制
change master to
master_host='172.16.1.53',
master_user='rep',
master_password='1',
master_log_file='mysql-bin.000005',
master_log_pos=120,
master_port=3307;
2.开启slave
start slave;
查看
mysql> show slave status \G

同步失败

#IO线程不为yes
1.ping主库
ping xx
2.测试端口(防火墙)
telnet ip port
3.测试主库授权的用户能否登录
mysql -urep -p1 -h172.16.1.52 -P3307
#uuid相同(修改或重启)
[root@db03 service]# cat mysql/data/auto.cnf 
[auto]
server-uuid=e67cd0f9-c2b1-11ea-9dc3-000c299148b7
#SQL线程没有yes
1.主库有数据,从库没有
2.从库有数据,主库没有,也就是说主库从库数据有差异

#先同步数据,立即看bin-log

作业:

1.三台数据库服务器恢复快照
2.三台都是用二进制安装方式安装数据库
3.手动搭建主从
4.主库写入数据,从库能同步

你可能感兴趣的:(mysql基础命令3)