MySQL主从配置:介绍,配置主数据库master,配置从数据库slave,同步参数配置,测试主从同步,修复错误

MySQL主从介绍
MySQL主从配置:介绍,配置主数据库master,配置从数据库slave,同步参数配置,测试主从同步,修复错误MySQL主从配置:介绍,配置主数据库master,配置从数据库slave,同步参数配置,测试主从同步,修复错误



配置主数据库master
编辑配置文件my.cnf
vim /etc/my.cnf

在basedir和datadir下增加:
server-id=128
log_bin=test1
保存退出

重启mysqld服务
systemctl restart mysqld

查看datadir目录下是否有以test1开头的文件

[[email protected] ~]# ls -lt /data/mysql/
total 110756
-rw-rw---- 1 mysql mysql 50331648 Jul  2 18:41 ib_logfile0
-rw-rw---- 1 mysql mysql 12582912 Jul  2 18:41 ibdata1
-rw-rw---- 1 mysql mysql   126231 Jul  2 18:41 test1.err
-rw-rw---- 1 mysql mysql        5 Jul  2 18:41 test1.pid
-rw-rw---- 1 mysql mysql       16 Jul  2 18:41 test1.index  索引文件
-rw-rw---- 1 mysql mysql      120 Jul  2 18:41 test1.000001  二进制的logbin文件,同步过程中还有多个这样的文件,相当于文件队列。
drwx------ 2 mysql mysql     4096 Jul  1 23:10 zrlog
drwx------ 2 mysql mysql     4096 Jun 21 15:35 mysql
-rw-rw---- 1 mysql mysql       56 Jun 10 18:55 auto.cnf
drwx------ 2 mysql mysql     4096 Jun 10 17:19 performance_schema
-rw-rw---- 1 mysql mysql 50331648 Jun 10 17:19 ib_logfile1
drwx------ 2 mysql mysql     4096 Jun 10 17:02 test

备份zrlog库,作为要备份的数据,(****=password)
mysqldump -u root -p**** zrlog > /tmp/zrlog.sql

创建同步用户,并授予replication slave权限,指定密码
grant replication slave on *.* to 'repl'@'slave_ip' identified by 'password';

锁表,禁止写入
flush tables with read lock;

查看主数据库当前状态,并记住File和Position对应的内容,从数据库上要用到
show master status;



配置从数据库slave

编辑配置文件my.cnf
vim /etc/my.cnf

在basedir和datadir下增加:
server-id=129 不能跟主数据库一样
保存退出

重启mysqld服务
systemctl restart mysqld
将主数据库备份的zrlog.sql文件拷贝到从数据库
scp -P port  [email protected]_ip:/tmp/zrlog.sql /tmp/

在从数据库里创建zrlog库,并将zrlog.sql恢复到zrlog库里
/usr/local/mysql/bin/mysql -u root
create database zrlog;
show databases;
quit;
/usr/local/mysql/bin/mysql zrlog < /tmp/zrlog.sql

配置从数据库从属slave:
mysql -uroot   进入库
stop slave;     停止从属
change master to master_host='', master_port=3306, master_user='repl', master_password='', master_log_file='', master_log_pos=xxx;    配置从属参数
start slave;   启动从属

注意:master_portmaster_log_pos后面不能有单引号,会报语法错误,master_password中若密码有特殊符号,也不需要用双引号。

主数据库上解表:
mysql -u root -p
unlock tables;


在从数据库上查看slave是否正常:

mysql -uroot
show slave status\G
查看:
Slave_IO_Running: Yes        备份线程是否正常(传输binlog生成relaylog)
Slave_SQL_Running: Yes     操作线程是否正常(执行relaylog里的sql语句)
Seconds_Behind_Master: 0   主从延迟时间
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:

注意防火墙打开主数据库监听的端口,默认3306


同步参数配置:


主数据库上的配置选项:
binlog-do-db=               仅同步指定的库,多个用半角逗号 , 分隔
binlog-ignore-db=         忽略指定库,多个用半角逗号 , 分隔

从数据库上的配置选项:
replicate_do_db=                      仅同步指定的库 ,多个用半角逗号 , 分隔
replicate_ignore_db=                忽略制定库,多个用半角逗号 , 分隔
replicate_do_table=                  仅同步指定的表,多个用半角逗号 , 分隔
replicate_ignore_table=            忽略指定的表,多个用半角逗号 , 分隔
replicate_wild_do_table=          仅同步指定库里指定的表(*.*),支持支持通配符%,如test.%
replicate_wild_ignore_table=    忽略指定库里指定的表(*.*),支持支持通配符%,如test.%



测试主从同步

主:       select count(*) from db;
从:       select count(*) from db;      

主:       truncate table db;
从:       select count(*) from db;
主:        drop table db;
从:        show table db;

修复错误:
如果在数据库上误删了库或表,导致主从同步报错, Slave_SQL_Running: No 。
解决办法:重新配置从属
1、stop slave; 停止从属
2、change master to master_host='', master_port=3306, master_user='repl', master_password='',     master_log_file='', master_log_pos=xxx;   
3、start slave;   启动从属