mysql从库binlog_转 mysql 主从复制以及binlog 测试 (5.7)

https://www.cnblogs.com/feiyun8616/p/9009497.html

(这篇文档描述了5.6 版本搭建从库),以下文档描述了5.7 版本mysql 从库的搭建。

5.7 版本使用600M tar 解压包,使用非编译 安装法

5.6 版本使用300M tar 解压包,使用非编译安装法

这里主要参考的模板为以下文档,感谢payon

https://www.jb51.net/article/108726.htm

###for mysql 5.7

##感谢关键步就几步

https://www.cnblogs.com/javabg/p/9951852.html

strings /lib64/libc.so.6 | grep GLIBC

cp /dbsoft/lxy/mysql/nbu/mysqlbackup /usr/bin/mysqlbackup

scp mysql-advanced-5.7.24-linux-glibc2.12-x86_64.tar.gz cradmin@56.18.99.206:/tmp/dba

tar -xzvf mysql-advanced-5.7.24-linux-glibc2.12-x86_64.tar.gz

groupadd mysql

useradd -r -g mysql mysql

mkdir /crabank/mysql

规划目录如下: my.conf 在data 目录下。

--defaults-file=/db/mysql/data/3306/my.cnf   (mysql 数据文件目录)

--basedir=/db/mysql/base/                            (mysql 软件安装目录)

--datadir=/db/mysql/data/3306/mydata

--plugin-dir=/db/mysql/base/lib/plugin/

--log-error=/db/mysql/data/3306/mydata/mysql-error.log

--pid-file=/db/mysql/data/3306/mydata/mysql.pid

--socket=/db/mysql/data/3306/mysqltmp/mysql.sock

mysql主目录处理

在software目录下移动文件到/usr/local/mysql:

mv mysql-advanced-5.7.24-linux-glibc2.12-x86_64 /db/mysql

cd /db/mysql

mv mysql-advanced-5.7.24-linux-glibc2.12-x86_64 base

chown -R mysql:mysql /db/mysql

##cp /db/db1/mysql/app/bin/mysql /usr/bin/mysql

cd /db/mysql

mkdir data

show variables like '%gtid%';

edit /db/mysql/data/3306/my.cnf

gtid_mode=on

log-bin=mysql-bin

log-slave-updates=1

enforce-gtid-consistency=1

1、在MySQL的生产从库进行mysqlbackup的全备  (这种方式本地备份,好像不会产生锁,但是NBU 备份确会产生锁,数据库HANG,原因未知)

##mysqlbackup --login-path=root --socket=/user/my$port/var/mysql.sock --backup-dir=$mybackdir_full ##--backup-image=$mybackdir_full/mybackup.mbi --compress backup-to-image

mysqlbackup -uroot -p --socket=/db/mysql/data/mysqltmp/mysql.sock --backup-dir=/db/mysql/bak \

--backup-image=/db/mysql/bak/mybackup.mbi --compress backup-to-image

2、将备份文件拷贝到目标主机

cd /db/mysql/bak

scp -rp * root@10.10.227.196:/db/db1/mysql/bak

#### 感谢 火星人华仔 user.frm,user.MYD,user.MYI https://www.cnblogs.com/shihua513/p/6166200.html

mkdir /home/mysql

chown mysql:mysql /home/mysql

2、将备份文件拷贝到目标主机

cd /db/mysql/bak

scp -rp * root@10.10.227.196:/db/db1/mysql/bak

3、在目标库进行恢复,可以用Mysql,也可以用root

##mysqlbackup --defaults-file=$mybackdir_full/backup-my.cnf --datadir=/user/my$port/data ##--backup_image=$mybackdir_full/mybackup.mbi --backup_dir=$mybackdir_full copy-back-and-apply-log --uncompress

export mybackdir_full=/db/mysql/bak

##注意:恢复数据文件目录 --datadir 要写正确,否则会导致 恢复错目录导致 MySQL无法启动:Table mysql.host doesn t exist! 发生错误1067 ,解决。

##这个命令貌似换行有问题,只能用notepad 放在一行执行,恢复目录:

##一定要cd 到数据文件目录,不然恢复也会报错,

cd /db/mysql/data/3306/mydata

mysqlbackup --defaults-file=$mybackdir_full/server-my.cnf --datadir=/db/mysql/data/3306/mydata --backup_image=$mybackdir_full/mybackup.mbi --backup_dir=$mybackdir_full copy-back-and-apply-log --uncompress

chown -R mysql:mysql mydata

4、mysql 用户 启动数据库

--cd /user/mysql/base

--nohup ./bin/mysqld_safe --defaults-file=/user/my${port}/my.cnf &

cd /db/mysql/base/

nohup ./bin/mysqld_safe --defaults-file=/db/mysql/data/3306/my.cnf &

cp /db/db1/mysql/bak/server-my.cnf /db/db1/mysql/app/my.cnf

--检查my.cnf

[mysqld]

basedir = /db/db1/mysql/app

datadir = /db/db1/mysql/data/mydata

log-error = /db/db1/mysql/app/mysql_error.log

pid-file = /db/db1/mysql/app/mysql.pid

#user = mysql

#tmpdir = /tmp

tmpdir=/db/db1/mysql/data/mydata/tmp

socket=/db/db1/mysql/data/mysqltmp/mysql.sock

slow_query_log_file=/db/db1/mysql/data/mydata/mysql-slow.log

slave_load_tmpdir=/db/db1/mysql/data/mydata/tmp

plugin_dir=/db/db1/mysql/app/lib/plugin/

slave_load_tmpdir=/db/db1/mysql/data/mydata/tmp

bind_address=10.10.227.198

character_sets_dir=/db/db1/mysql/app/share/charsets/

general_log_file=/db/db1/mysql/data/mydata/pdb1db02.log

lc_messages_dir=/db/db1/mysql/app/share/

log_bin=/db/db1/mysql/data/mydata/mysql-bin

log_bin_index=/db/db1/mysql/data/mydata/mysql-bin.index

log_error=/db/db1/mysql/data/mydata/mysql-error.log

cd /db/db1/mysql/app/

nohup ./bin/mysqld_safe --defaults-file=/db/db1/mysql/app/my.cnf &

chown -R mysql:mysql /db/mysql/bak/

##感谢 散尽浮华

##测试GTID 是否要开了

"show variables like '%gtid%';"查看

/db/mysql/app/mysql/my.cnf

gtid_mode=on

log-bin=mysql-bin

log-slave-updates=1

enforce-gtid-consistency=1

select INET_ATON('56.18.99.206')

server_id=180806598

三、重启

su - mysql

mysqladmin -uusername -p shutdown

/db/mysql/base/bin/mysqld_safe --defaults-file=/db/mysql/data/3306/my.cnf &

##mysqld_safe --defaults-file=/**/**/my.cnf &

show master status;

##调整my.cnf文件中的server_id参数,这条命令可以在主库执行,但是IP 用的是从库VIP

###通过 server-id 来区分 是否主库 还是 备库

server-id只需采用ip地址的整数形式如:

select INET_ATON('10.10.227.198'),server_id=180806598

show variables like '%server_id%';

5、为了接续复制需要重新设置gtid_purged,

运行$mybackdir_full/meta/backup_gtid_executed.sql重置gtid_purged

--@/db/db1/mysql/bak/meta/backup_gtid_executed.sql

SET @@GLOBAL.GTID_PURGED='52714855-1870-11e8-bce2-005056bd438d:1-3';

####感谢 Payon https://www.jb51.net/article/108726.htm

#####执行时候报错 : ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

fix:

reset master;

--@/db/db1/mysql/bak/meta/backup_gtid_executed.sql

SET @@GLOBAL.GTID_PURGED='52714855-1870-11e8-bce2-005056bd438d:1-3';

6、slave 操作 ,修改MASTER,MASTER_HOST需要设置为生产从库IP

1).在主库上建立复制账户并授予权限

###基于GTID的复制会自动地将没有在从库执行的事务重放, 所以不要在其他从库上建立相同的账号. 如果建立了相同的账户, 有可能造成复制链路的错误.

###注意在生产上的密码必须依照相关规范以达到一定的密码强度, 并且规定在从库上的特定网段上才能访问主库.

因为可能在ZH和SS 同时搭建从库,所以不需要有IP 限制

create user 'resync'@'%' identified by 'Resync$123';

grant replication slave on *.* to 'resync'@'%';

or

GRANT REPLICATION SLAVE ON *.* TO 'resync'@'%' IDENTIFIED BY 'Resync$123';

flush privileges;

select user, host from mysql.user;

show grants for 'resync'@'56.%';

##已有的从库查看 同步的密码

感谢li

1.SHOW SLAVE STATUS\G

master.info

查看 master.info 位置

2.Master_Info_File: /db/mysql/data/mydata/master.info

cat /db/mysql/data/mydata/master.info 查看密码

2).从库上配置:

mysql> show databases;

CHANGE MASTER TO MASTER_HOST='10.200.210.187', MASTER_USER='resync',Master_Port=3306, MASTER_PASSWORD='Resync$123', MASTER_AUTO_POSITION=1;

7、RESET SLAVE

必须reset,否则会报错:ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

8、START SLAVE

9、SHOW SLAVE STATUS\G

如下三项值说明同步正常

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master: 0

当Slave_IO_Running, Slave_SQL_Running为YES,

且Slave_SQL_Running_State 为Slave has read all relay log; waiting for more updates时表示成功构建复制链路

从库设置为read-only

show variables like 'read_only';

调整前状态

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only | OFF |

+---------------+-------+

调整为只读

set global read_only=on;

10.mysql> show master status;检查主库状态

use tmp

create table tb1 ( id int);

create table tb2 ( id int, age int, name char(20), primary key(id) );

12. 数据库名字验证

show databases;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值