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 \
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