MySQL之主从复制相关知识、操作整理

Mysql用户授权

1、登录mysql数据库
Mysql > mysql -u root -p 789123

2、给从服务器设置授权用户
Mysql>grant all on *.* to [email protected] identified by “password”;
Mysql>grant replication slave on *.* [email protected] identified by “password”;

注:从服务器要来主服务器上同步数据,就得给从服务器设置一个用户并且指定从服务器的ip,这样,从服务器才能连接到主服务器,从而,对数据进行同步,这是前提!

3、查看用户的授权表
Mysql>select user,host,password from mysql.user

注:如果授权成功,那么我们应该可以从结果集上看到授权的用户,以及对应的ip。

Mysql bin-log日志

1、开启mysql bin-log日志
Vi /etc/my.cnf
[mysqld]
port = 3306;
socket = /var/lb/mysql/mysql.block
log-slow-queries = mysql-slow.log
log-error = mysql.err
log = mysql.log
log-bin = mysql-bin

注:开启是【log-bin=mysql-bin】. 一旦保存,重启mysql,bin-log日志就开启了。

警告:修改配置后,一定记得重启mysql,使配置生效
service mysqld restart


2、查看bin-log日志是否开启
mysql> show variables like '%log_bin%';


3、与bin-log日志有关的日志刷新

刷新日志:mysql>flush logs;

注:这个操作会生成新的bin-log日志文件,每刷新一次,就会生成一个新的文件,目的是为了让你和旧的文件有个分离。
查看最后一个日志:mysql>show master status;

注:这个命令能够看到最后一次执行的位置,pos,这个有利于你定位到你要执行操作的bin-log日志。


清空所有的日志:mysql>reset master;

注:此操作会删除所有的 bin-log日志
查看bin-log日志:

a.首先进入到bin-log日志的目录
cd /mine/serve/mysql/var

b.使用bin目录下的mysqlbinlog文件进行查看
[root@iZm5eizpokikoertia0x31Z mysql]# /mine/serve/mysql/bin/mysqlbinlog mysql-bin.000001

这个时候呢,有可能会报错,“utf8字符集无效”,处理方式:
 /mine/serve/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000001

这样,就可以查看了!
使用bin-log日志恢复数据

a、进入到mysql的二进制目录
cd /mine/serve/mysql/bin

b、通过binlog日志执行恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --start-position=107 --stop-position=5601 | ./mysql -u root -p

Mysql备份数据(导出数据)

mysqldump -u root -p 789123 newdata -l -F/mine/tool/sql/newdata.sql

注:
-F即flush logs,每备份一次,就重新生成一个新的日志文件,包括bin-log日志,查看bin-log日志,用mysql>show master status,这一步很重要!

-l 即lock,是为了锁定库,只有当数据备份完毕,才可以解锁。


Mysql恢复(已备份的)和bin-log日志(宕机后的操作数据)

a、mysql -u root -p 789123 newdata -v -f < /mine/tool/sql/newdata.sql (已备份的)

注:
-v 查看导入的详细信息。
-f 即false,表示中间遇到错误的时候,自动跳过,继续执行下面的操作。

b、./mysqlbinlog bin-log.000005 | ./mysql -u root -p 789123 (宕机后的操作数据)


多行查看bin-log日志

./mysqlbinlog /mine/serve/mysql/data/bin-log.00005 | more


Bin-log指定位置恢复数据

a、指定开始、结束位置恢复数据
 ./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --start-position=107 --stop-position=5601 | ./mysql -u root -p

b、指定结束位置恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --stop-position=5601 | ./mysql -u root -p

c、指定时间恢复数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --start-date=”2019-07-12 18:00:00” --stop-position=”2019-07-12 18:30:00” | ./mysql -u root -p

d、指定截止时间之前数据
./mysqlbinlog /mine/serve/mysql/data/mysql-bin.000002 --stop-position=”2019-07-12 18:30:00” | ./mysql -u root -p

Mysql主从复制的作用或优点

1、如果主服务器出现问题,可以快速切换到从服务器
2、可以在从服务器上执行查询操作,降低主服务器的压力
3、可以在从服务器上执行备份,以免备份期间影响主服务器的服务

注意:一般只有更新不频繁的数据或者对实时性要求不高的数据,可以通过从服务器进行查询,实时性要求比较高的数据仍然需要从主数据库进行查询。

Mysql数据库主从同步配置的基本步骤

-----== 主服务器配置

1、登录mysql数据库
mysql>mysql -u root -p db

2、给从服务器设置授权用户
mysql>grant all slave on *.* [email protected] identified by “pass”;
或
mysq>grant replication slave on *.* [email protected] identified by “pass”

3、修改主服务器的配置文件my.cnf,开通bin-log,并设置server-id的值
log-bin=mysql-bin
server-id=1

4、在主服务器上设定读锁,确保没有数据库操作,以便获得一个一致性的快照(选做)
mysql>flush tables with read lock;

注:数据量大的情况,必须锁定表,否则,无法做到数据完全同步。

5、查看主服务器上的当前的二进制日志名和位置偏移量
mysql>show master status;

6、这时,主服务器上已经停止了数据更新操作,这样备份,就可以完全同步了。备份的方式分为两种:
a、复制全部的数据;
b、Mysqldump备份数据

注:如果主库的服务可以停止,那么直接复制数据文件,是最快的方法。如:
tar -zcvf data.tar data

7、主数据库备份完毕以后,主数据库恢复写操作,剩下的操作,交给从服务器来执行就可以了。
mysql>unlock tables; (解锁所有的表)

8、主数据库的数据在从库恢复的最快方法,就是,将压缩包目录放到数据文件目录,解压即可。

-----== 从服务器配置 (注意:引擎是myisam)

1、修改从数据库的server-id,注意这个server-id的值必须是唯一的,而且不能喝主数据库的server-id相同,而且,即使有多台从数据库,每个从数据库的server-id都不能有相同的。

从服务器的配置:
server-id=2
master-host=47.104.176.145
master-user=slave
master-password=123456
master-port=3306
log-bin=mysql-bin
#replicate-do-db=new
#replicate-do-table=new.sky


2、从服务器配置更改完毕以后,一定要记得重启mysql,让新改的配置生效。
pkill mysqld
/mine/serve/mysql/bin/mysqld_safe --user=mysql &


3、配置完从服务器后,记得查看主从进程,查看的方式通常有两种方式。

a、processlist
mysql>show processlist \G
如果出现:state : waiting for master to send event,则表示连接主数据库成功,而且成功获取bin-log.
如果出现:state : has read all ready log, waiting for the slave i/o thread to update it,成功执行bin-log日志,正在等待着去再次连接主数据库并更新获取bin-log日志

b、status
mysql>show slave status \G
如果出现:
Slave_IO_Running:Yes
则表示从服务器已经读取了主服务器(数据库)的bin-log日志,并写入到了从服务器的中继日志中。
Slave_SQL_Running:Yes
此进程表示读取并执行了中继日志中的bin-log日志。

注意:当以上的两个进程都成功的时候,主从复制才算成功,若有一个是no,则主从复制失败。错误原因可以从“last_error”字段中获取。


4、从数据库常用的命令
a、start slave    # 启动复制线程
b、stop slave    # 停止复制线程
c、show slave status    #查看从数据库的状态
d、show master logs    #查看主数据库的bin-log日志
e、change master to    #动态改变到主服务器的配置
f、show processlist     #查看从数据库运行进程

Mysql主从同步常见错误

1、错误:从数据库无法同步主数据库的数据,显示show slave status为Slave_SQL_Running为No,Seconds_Behind_Master为null,原因有:
a、程序可能在slave上进行了写操作
b、也可能是slave机器重启以后,事务回滚造成的。

2、解决的办法,如下进行操作:

a、方法一
mysq>slave stop;
mysql>set GLOBAL_SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;

b、方法二
进入到slave库,slave stop,停掉slave服务;进入到master库,show master status,查看主服务器上的二进制日志名和位置偏移量。然后,到slave服务器上手动执行同步:
msql>change master to
master_host=”39.100.51.121”,
master_user=”slave”,
master_password=”slave123456”,
master_port=3306,
master_log_file=”mysql-bin.000005”,
master_log_pos=98,
启动slave服务,mysql>slave start; 然后通过show slave status 查看Slave_SQL_Running为Yes,Second_Behind_Master为0即为正常。


警告:在做数据库主从复制的时候,一定要先清理一下bin-log日志,确保跟以前的数据彻底断开,从新开始(产生了新的bin-log日志)了,才不会在后续的操作中,出现一些乱七八糟的错误!

发布了59 篇原创文章 · 获赞 2 · 访问量 5588

猜你喜欢

转载自blog.csdn.net/LDR1109/article/details/100942088