MYSQL运维笔记

CREATE USER 'glkj'@'%' IDENTIFIED WITH mysql_native_password BY 'Rmodi_1130';

https://www.cnblogs.com/igoodful/p/15331716.html

克隆MYSQL搭建主从:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';

或者

在配置文件中加入:

plugin-load-add=mysql_clone.so

这两个方法只需要任意做一个就可以了。

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'clone';

本地克隆:

clone local data directory ="/home/work/apple";

远程克隆:

在源库创建克隆账号并授权:

CREATE USER clone IDENTIFIED by 'clone';

GRANT BACKUP_ADMIN ON *.* TO 'clone';

在目标库中执行:

set global clone_valid_donor_list ='192.168.137.5:3306';

clone instance from 'clone'@'192.168.137.5':3306 identified by 'clone';

克隆完后两边的库就是一模一样的了。

查看克隆进度:

# 在目标实例上执行:

SELECT STATE, ERROR_NO, ERROR_MESSAGE FROM performance_schema.clone_status;

select

state,

cast(begin_time as datetime) as "start time",

case when end_time is null then lpad(sys.format_time(power(10,12) * (unix_timestamp(now()) - unix_timestamp(begin_time))), 10, ' ')

else lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10, ' ')

end as duration,

source,destination,

binlog_file,binlog_position,

gtid_executed

from

performance_schema.clone_status \G;

在从库中执行:

change master to master_host='192.168.137.5',master_port=3306,master_user='repl',master_password='repl',master_auto_position=1;

start slave;

show slave status \G

mysql多实例管理:

mkdir -p /application/330{7,8,9}/data

cat >/application/3307/my.cnf <<EOF

[mysqld]

basedir=/application/mysql

datadir=/

socket=

log_error=

port=

server_id=7

log_bin=

EOF

cat >/application/3308/my.cnf <<EOF

[mysqld]

basedir=/application/mysql

datadir=/

socket=

log_error=

port=

server_id=8

log_bin=

EOF

cat >/application/3309/my.cnf <<EOF

[mysqld]

basedir=/application/mysql

datadir=/

socket=

log_error=

port=

server_id=9

log_bin=

EOF

mv /etc/my.cnf  /etc/my.cnf.bak

mysqld --initialize-insecure  --user=mysql  --datadir=/application/3307/data --basedir=/application/mysql

mysqld --initialize-insecure  --user=mysql  --datadir=/application/3308/data --basedir=/application/mysql

mysqld --initialize-insecure  --user=mysql  --datadir=/application/3309/data --basedir=/application/mysql

cd /etc/systemd/system

cp mysqld.service mysqld3307.service

cp mysqld.service mysqld3308.service

cp mysqld.service mysqld3309.service

MYSQL双主双从搭建:

MYSQL二进制的安装方法:

1、解压源码包

2、检查系统中有没有MariaDB,如果有就要将其清除掉,否则就会有冲突

rpm -qa | grep mariadb

yum remove  mariadb-libs

3、增加mysql用户:

useradd mysql

4、编辑环境变量:

vi /etc/profile

export PATH=/application/mysql8/bin:$PATH

source  /etc/profile

5、更改目录属组:

chown -R mysql:mysql  /application/mysql8/

6、初始化数据库:

mysqld --initialize  --user=mysql  --lower-case-table-names=1  --basedir=/application/mysql8  --datadir=/application/mysql8/data

mysqld --initialize-insecure  --user=mysql --lower-case-table-names=1  --basedir=/application/mysql8 --datadir=/application/mysql8/data

7、创建配置文件:

cat >/etc/my.cnf <<EOF

[mysqld]

user=mysql

basedir=/application/mysql8

datadir=/application/mysql8/data

server_id=155

port=3306

[mysql]

EOF

8、拷贝文件:

cp  /application/mysql8/support-files/mysql.server  /etc/init.d/mysqld

cp  /home/data/mysql/support-files/mysql.server  /etc/init.d/mysqld

9、启动mysql:

service mysqld restart

注意,让复制用户在每个服务器上登录一下,看能不能登录!这一点很关键!

change master to master_host='192.168.43.96',master_user='repl',master_password='repl',\

master_log_file=' binlog.000001',master_log_pos=155;

1、首先要创建一个和原表一样的结果表,来存放要归档的数据:

create table t2 like t1;

2、归档表,归档的表要有主键:

pt-archiver --source h=192.168.137.5,D=test,t=pt1,u=pt,p=toolkit \

--dest h=192.168.137.5,D=test,t=pt2,u=pt,p=toolkit --where 'id <4' --no-check-charset --no-delete --limit=1000 \

--commit-each --progress 1000  --statistics

建立一个用户来做归档:

create user pt identified with mysql_native_password  by 'toolkit';

grant all on *.*  to  pt;

pt-archiver --source h=192.168.137.5,D=test,t=pt1,u=pt,p=toolkit \

--dest h=192.168.137.5,D=test,t=pt2,u=pt,p=toolkit --where 'id<4' --no-check-charset --no-delete --limit=100 \

--commit-each --progress 200 --statistics

归档完清理原表的数据:

pt-archiver --source h=192.168.137.5,D=test,t=pt1,u=pt,p=toolkit --where 'id<4' --purge --limit=1 --no-check-charset

pt-archiver --source h=192.168.137.5,D=test,t=pt1,u=pt,p=toolkit \

--where 'id<4' --purge --limit=1 --no-check-charset

PT工具的使用,在线修改表结构:

pt-online-schema-change  --user=pt --password=toolkit --host=192.168.137.5 \

--alter "add column state int not null default 1" D=test,t=pt1  --print --execute

在线建立索引:

pt-online-schema-change  --user=pt --password=toolkit --host=192.168.137.5 \

--alter "add index idx(state)" D=test,t=pt1 --print --execute

检查主从同步的表是否一致:

pt-table-checksum --nocheck-replication-filters  --no-check-binlog-format  \

--replicate=pt.checksums \

--create-replicate-table --databases=test --tables=pt1 \

h=192.168.137.5,u=checksum,p=checksum,P=3306

pt-table-sync  --replicate=pt.checksums  --databases test --tables pt1 \

h=192.168.137.5,u=checksum,p=checksum,P=3306 h=192.168.137.6,u=checksum,p=checksum,P=3306 \

--print

pt-table-sync  --replicate=pt.checksums  --databases test --tables pt1 \

h=192.168.137.5,u=checksum,p=checksum,P=3306 h=192.168.137.6,u=checksum,p=checksum,P=3306 \

--execute

select substring(md5(rand()),1,5);

压力测试:

mysqlslap  --defaults-file=/etc/my.cnf --concurrency=100 --iterations=1 \

--create-schema='test' --query="select  *  from  test.t_1 where name='jin'"  \

engine=innodb --number-of-queries=2000  \

-uroot -poracle  -verbose

mysqlslap -uroot -poracle --concurrency=100 --iterations=1 --auto-generate-sql \

--auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement \

--engine=innodb  --number-of-queries=5000

htop  ,iotop ,

iftop  etho  ---- 查看网卡的流量

配置延迟从库:

stop slave;

change master to master_delay=3600;

start slave;

show slave status \G

延迟故障恢复:

stop salve sql_thread;

show relaylog events in 'bin.000002';

mysqlbinlog --start-position=626 --stop-position=1299  db01-relay-bin.00002 >/tmp/relay.sql

备份全库:

mysqldump -uroot -poracle -A -R  --triggers  --set-gtid-purged=OFF  >full.sql   

在从库中进行恢复:

mysql -uroot -p  <full.sql       

快速恢复测试环境:

主库:

reset master;

从库:

drop database delay;

stop slave;

reset salve all;

在从库中执行:

stop slave;

change master to

master_host='192.168.137.5',

master_user='repl',

master_password='repl',

master_port=3306,

master_log_file='binlog.000001',

master_log_pos=3609,

master_connect_retry=10;

change master  to

master_host='192.168.137.5',

master_user='repl',

master_password='repl',

master_auto_position=1;

start slave;

过滤复制的配置:在从库的配置文件中加入一行即可:

replicate_do_db=test

show collation;  查看所有支持的校对规则

show master status; 查看mysql当前使用的二进制日志信息

show  relaylog events in '' ; 查看中继日志的事件信息

翻译binlog日志:

mysqlbinlog --base64-output=decode-rows  -vvv  mysql-bin.00004

截取二进制日志:

mysqlbinlog --start-position=219  --stop-position=335  mysql-bin.000004 >/tmp/a.sql

mysqlbinlog -d  test  mysql-bin.000004  只显示test库的日志

全局事务ID:每个一个事务都会分配一个ID。GTID由SERVER_UUID+事务ID组成。

开启GTID模式只需要在配置文件中加入两行就可以了:

enforce_gtid_consistency=on

gtid_mode=on

截取GTID:

show binlog events in 'binlog.000002';  查看二进制日志的事件信息

截取BINLOG:这样截取后,在恢复的时候会报错!

mysqlbinlog  --include-gtids='79de5cd0-78d0-11ec-b2ba-080027199538:1-3' binlog.000002>/tmp/gtid.sql

加上下面的参数就可以了:

mysqlbinlog  --skip-gtids  --include-gtids='79de5cd0-78d0-11ec-b2ba-080027199538:1-3' binlog.000002>/tmp/gtid.sql

--skip-gtids:在导出时,忽略原有的GTID信息,恢复时生成最新的GTID信息

set sql_log_bin=0;  临时关闭恢复时产生的新二进制日志

source /tmp/gtid.sql

set sql_log_bin=1;  开启

开启慢日志:

slow_query_log=1

slow_query_log_file=/var/log/slow.log

long_query_time=3

log_queries_not_using_indexes

分析慢日志,找到慢SQL:

mysqldumpslow -s -c -t 10  /var/log/slow.log

-c 表示次数

pt-query-diagest    /var/log/slow.log

alter table city add index idx_1(district(5))  前缀索引

select district, group_concat(name)  from city  group by district;

LIMIT M,N  :跳过M行,显示N行

LIMIT Y OFFSET X :跳过X行,显示一共Y行

全备:

mysqldump -uroot -poracle -A >/backup/full.sql

备份多个库:

mysqldump -uroot -poracle -B test db1 db2  >/backup/DB.sql

备份一个库中的多个表:

mysqldump -uroot -poracle  test t_1 t_2 >/backup/T.sql

-R 存储过程和函数

-E 事件

--triggers

--master-data=2

1.记录备份时刻的binlog信息

2.自动锁表

不加 --single-transaction ,温备份

加了 --single-transaction  对于innodb表不锁表备份

--single-transaction

对于innodb表不锁表,一致性的备份

全备:

mysqldump -uroot -poracle -A --master_data=2 --single-transaction -R -E --triggers >/tmp/full.sql

全备:

mysqldump -uroot -poracle -A -R --max_allowed_packet=128M --triggers  --set-gtid-purged=OFF \

--master-data=2 --single-transaction|gzip >/backup/full_$(date +%F).sql.gzip

升级完后执行这个命令:

mysql_upgrade  -uroot -p123  -S /data/3308/mysql.sock

全备:

innobackupex --user=root --password=oracle --no-timestamp  /backup/full

第一次增量备份:

innobackupex --user=root --password=123 --no-timestamp  --incremental

--incremental-basedir=/backup/full  /backup/inc1

第二次增量备份:

innobackupex --user=root --password=123 --no-timestamp  --incremental

--incremental-basedir=/backup/inc1  /backup/inc2

恢复:

innobackupex  --apply-log  --redo-only  /backup/full

innobackupex  --apply-log  --redo-only  --incremental-dir=/backup/inc1  /backup/full

innobackupex  --apply-log  --incremental-dir=/backup/inc2  /backup/full

innobackupex  --apply-log  /backup/full

判断连接数是否够用:

show variables like 'max_connections';

show status like 'Max_used_connections';

查看临时表的缓冲区是否够用:KEY_BUFFER_SIZE

show status like '%Created_tmp%';

双一标准:

innodb_flush_log_at_trx_commit=1

sync_binlog=1

innodb_flush_method=0_direct

监控锁:

show status like 'innodb_row_lock%';

看被阻塞的事务:

select  *  from  information_schema.innodb_trx where trx_state='LOCK WAIT';

查看锁源,谁锁的我

select *  from  sys.innodb_lock_waits;

根据锁源的PID,找到锁源SQL的线程ID

select *  from performance_schema.threads where processlist_id=;

根据锁源SQL线程ID,找到锁源的SQL语句

select * from  performance_schema.events_statements_current where thread_id=;

一个表就是一个段,一个段由多个区组成,一个区有64个连续的页组成,一个页16K,一个区就是1M

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容