#远程登录MySql
mysql -h62.234.124.229 -P31306 -ucrab -
p123456
mysql --host=62.234.124.229 --user=yq --password=123456
##给远程登录的用户授权:
grant all on *.* to crab@
‘114.248.166.196‘ identified by
‘123456‘;
grant select,update,delete on *.* to crab@
‘114.248.166.196‘ identified by
‘123456‘;
crab@‘114.248.166.196‘:权限一定是用户名+
ip地址;
crab@‘114.248.166.%‘
crab@‘114.248.%‘
crab@‘%‘ 表示全部地址均可访问;
##测试远程连接是否可用
telnet ip 数据库端口 --3306
是mysql的默认端口,如果连接数据库时不指定端口,默认尝试去连3306
##客户端mysql命令的参数:mysql --help
-
h :host
-
u : user
-
p : password
-e, --execute=name Execute command
and quit. (Disables --force
and history
-f, --force Continue even
if we get an SQL error. Sets
abort-source-on-
error to 0
file.)
-P, --port=
# Port number to use for connection or 0 for default to, in
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/services, built-
in default (3306
).
-s, --
silent Be more silent. Print results with a tab as separator,
each row on new line.
-E, --
vertical Print the output of a query (rows) vertically.
-D, --database=
name Database to use.
##远程执行 指令:
mysql --host=62.234.124.229 --user=yq --password=123456 --execute=
"show grants"
mysql -h62.234.124.229 -uyq -p123456 -e
"show grants"
mysql -h62.234.124.229 -ucrab -p123456 -e
"select * from city order by Population desc limit 10;"
## mysqladmin指令:
flush-
hosts:刷新客户端错误连接的缓存
processlist与登录mysql后命令行执行 show processlist;一样的
mysqladmin -c5 -i2 -h 62.234.124.229 -ucrab -
p123456 processlist
mysqladmin -c5 -i2 -h 62.234.124.229 -ucrab -
p123456 status
-
c:是一共执行多少次
-
i:是间隔几秒,
##查看客户端连接ID:select connection_ID();
##binlog与mysqlbinlog命令
binlog是mysql的二进制日志,记录mysql中所有的数据和结构**变化**
1
.打开二进制日志,参数 log_bin,在my.cnf里添加该参数
show global variables like
"log_bin"
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/VM_0_15_centos-bin |
| log_bin_index | /var/lib/mysql/VM_0_15_centos-bin.index |
VM_0_15_centos-
bin.index,以index结尾的文件存放的是当前binlog列表名
mysqlbinlog 是用来打开读取二进制日志的
mysqlbinlog VM_0_15_centos-
bin.index
show global variables like
"%log_bin%"
##mysql命令行,远程查看binlog日志:
show binary logs;
show binlog events in "VM_0_15_centos-bin.000003"
##临时整理:
mysqlbinlog --start-position=471 --stop-position=875 --database=ops /var/lib/mysql/mysql-bin.000003
从binlog日志恢复数据
恢复命令的语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -
p密码 数据库名
常用参数选项解释:
-–start-position=875
起始pos点
-–stop-position=954
结束pos点
-–start-datetime=
"2019-12-23 18:00:00" 起始时间点
-–stop-datetime=
"2019-12-23 19:00:00" 结束时间点
-–database=
zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
不常用选项:
-u --user=
name 连接到远程主机的用户名
-p --password[=
name] 连接到远程主机的密码
-h --host=
name 从远程主机上获取binlog日志
–read-
from-remote-
server 从某个MySQL服务器上读取binlog日志
mysqlbinlog -h18.6.3.72 -P31306 -ulps -p0000abc! -–start-datetime=
"2019-12-23 18:00:00" -–stop-datetime=
"2019-12-23 19:00:00" --database=g3_lps_core_00 /data/binlog/bin.000520
mysql -h18.6.3.72 -P31306 -ulps -p0000abc! --start-datetime=
"2019-12-23 18:00:00"
##MySQL的备份恢复
逻辑备份:按照mysql的逻辑进行备份,备份出来的是可执行的sql语句
常用命令,mysqldump(mysql自带的),mydumper(开源工具)
基于语句级别的:select ... into outfile ‘xxx‘
mysqldump 可本机执行,也可远程执行
mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --
databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-
databases [OPTIONS]
#备份所有库:
mysqldump -uroot -p123456 --all-databases >
all_dump.sql
1
.备份库表结构,转译成可执行的建库建表语句
2
.备份完表结构后开始备份表的数据,转移成insert语句
#备份单库
mysqldump -uroot -p123456 world >
world_dump.sql
恢复单库流程1:
mysql -uroot -p123456 dump_test<
dump_test.sql
#备份多个库
mysqldump -uroot -p123456 --databases dump_test dump_test1 >
test12_dump.sql
恢复方式2:登录mysql命令行,执行source +
sql文件
system 是直接调用linux命令
#备份单个库的多张表:
mysqldump -uroot -p123456 world table1 table2 table3 >
world_dump.sql
##sql命令行执行系统指令加system :system ls -l
##mysqldump 远程备份:
在只有select权限时,通过添加--skip-lock-
tables(用户没有锁表权限,只有select权限),也可以做备份
mysqldump -h62.234.124.229 -udump_user --skip-lock-tables -p123456 dump_test >
dump_test.sql
备份g3_lps_meta库的game_group表:--column-statistics=
0 mysql8.0版本新加的参数,其他版本不需要
mysqldump --column-statistics=0 -h18.6.3.72 -P31306 -ulps -p0000abc! g3_lps_meta game_group >
world_dump.sql
##只备份结构
-
d 可以用来构建空的测试环境。
mysqldump -h62.234.124.229 -udump_user -d --all-databases >
all_struct.sql
##sql语句方式备份数据(注意备份路径有参数限制)
select ... into outfile
‘xxx‘
| secure_file_priv | /var/lib/mysql-files/ |
这个参数要求outfile 后面的文件必须在这个目录才可以
select *
from dump_t1 into outfile
‘/var/lib/mysql-files/ss.txt‘;
load data infile ‘/var/lib/mysql-files/ss.txt‘ into table dump_test.dump_t1 ;
##创建一个新表,做数据备份
create table tb_bk as select *
from tb;
##创建一个新表,基于后面的sql查询结果
create table citytop10 as select Name,Population
from city order by Population desc limit 10
;
create table city_bak as select *
from city ;
1
.两个表的数据一定一致
2
.结构,字段类型长度都一致,新表是没有索引的。一定要注意
3
.恢复可以用rename操作,但要注意结构变化,比如索引
rename table city_bak to city;
##总结
1
.mysqldump
2
.select into outfile(注意文件存放目录权限)
3
.create table tb_bak as select
##mysqldump操作注意点:
1.默认mysqldump备份只需要select权限和lock-
tables权限
2
.默认mysqldump备份是会锁表的,尽量避免线上环境直接备份
3
.恢复,恢复会有drop表的操作,或其他覆盖性操作,所以恢复前一定check
##物理备份:是基于linux系统直接拷贝物理文件的备份,
分冷备(cp数据目录)与热备(xtrabackup)
冷备:把服务停下来,直接备份数据目录
show global variables like
"%datadir%"
| datadir | /var/lib/mysql/ |
#停掉mysql服务,直接拷贝数据目录,也就是datadir
cp -
r mysql mysql_bak
#恢复就是把原来目录删除,用备份目录替换
为什么要停mysql?
innodb引擎下,有大量的数据是在内存中的,并没有落地磁盘, 所以必须先停服让内存数据落盘再拷贝。
############MySQL的集群架构
1
.主从复制
初始化mysql的数据目录(注意备份):mysql_install_db --datadir=/var/lib/mysql --user=
mysql
62.234.124.229
主
192.144.217.235
从
2.打开binlog,配置server-
id
229主:binlog=on,server-id=12
235从:binlog=on,server-id=10
需要保证server-
id不能相同
3
.配置权限账号
在229主配置
replication slave replication client
grant replication slave,replication client on *.* to slave_user@
‘62.234.124.229‘ identified by
‘123456‘;
4
.找binlog同步位置
在229主上找到当前binlog位置
show master status;
+---------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------------+----------+--------------+------------------+-------------------+
| VM_0_15_centos-bin.000001 | 500 | | | |
+---------------------------+----------+--------------+------------------+-------------------+
##建立同步
在235从
change master to master_host=
‘62.234.124.229‘,
master_user=
‘slave_user‘,
master_password=
‘123456‘,
master_log_file=
‘VM_0_15_centos-bin.000001‘,
master_log_pos=500
;
5
.启动同步,查看同步状态
start slave;
show slave status;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
只要这两个线程是yes的,就表示正常同步中
##主从同步的注意事项:
为了保证主从数据的一致性,从服务器上不要有变更操作
读写分离:凡是写的请求都到主,读的请求可以到从执行,配合一主多从架构,可以极大的扩展集群的承载能力
应用的读写比:10:1
读写分离需要注意一点,主从同步是可能产生延迟的,理论是1秒以内,特殊场景
可能产生几分钟甚至几小时的数据延迟。
延迟的敏感的业务,读写都在主上。
可以支持到1主20从
###mysql 的HA,也叫高可用切换 High avilibale
1
.最简单的方式是接入vip,用keepalive来做高可用
映射IP 192.144.217.100 --> 62.234.124.229
主
主服务器故障时映射IP192.144.217.100 --> 192.144.217.235
从
192.144.217
.235成为主,下一步就补充新的从
问题: 数据延迟不一致。丢失风险
引入一些新的HA策略,比如开源组件MHA
###主主复制
但是也要求只有一侧可以写入
优点:可以来回切写
主服务器执行:
change master to master_host=
‘192.144.217.235‘,
##从服务器的地址
master_user=
‘slave_user‘,
master_password=
‘123456‘,
master_log_file=
‘VM_0_10_centos-bin.000002‘,
master_log_pos=783
;
log_slave_update:控制从上relay执行后,是否记录到binlog
如果打开了也不会循环,server-
id不同,不会自己执行自己的binlog
##mysql数据库的缓存:
querycache
query_cache_type |
OFF
缓存:可以缓存的是sql完全一致的请求
默认是关闭的,也建议关闭;写入比较大的时候会造成系统负载
关掉cache之后,业务上引入的就是redis了,性能更好
redis理论的QPS 在10w左右;
所有数据放在内存
单线程架构,只占用一个CPU
1G内存的redis、10G内存的redis 哪一个QPS更高/
每秒的查询数:
答案:一样的。
采用redis来做mysql上层的缓存,redis是如何缓存mysql数据的,哪些缓存,哪些不缓存
答案:通过业务控制
##数据库性能测试的瓶颈
1
.磁盘IO
2
.内存大小
3
.cpu主频
##压测工具,基准测试;sysbench
可以做linux压测,也可以做数据库压测
##专门的数据库TPS测试工具,tpcc-mysql
mysql 数据库的主从复制及备份、恢复
标签:ant tpc select linu tpcc 应用 mysql8 sla 指令