Mysql主从复制

有兴趣的同学可以移步笔者的个人博客 更多博客

基本配置

Master库

1.Master配置

修改my.cnf:

log-bin=mysql-bin                            #开启二进制文件
server-id=2                                  #唯一标识
binlog-ignore-db=information_schema          #忽略数据库计入binlog
binlog-ignore-db=cluster
binlog-ignore-db=mysql
binlog-do-db=ufind_db                        #开启数据库计入binlog

在Master数据库命令行中输入:

#为从库分配用户,包含文件权限 (5.6以下)
>GRANT FILE ON *.* TO '为从库分配的用户名'@'从库地址' IDENTIFIED BY '为从库分配的密码';  
#为从库分配用户,包含复制二进制文件权限 (5.6及以上)
>GRANT REPLICATION SLAVE ON *.* TO '为从库分配的用户名'@'从库地址' IDENTIFIED BY '为从库分配的密码';
#更新权限
>FLUSH PRIVILEGES
2.验证

键入命令

mysql> show master status;

显示以下信息则配置成功

+------------------+----------+--------------+----------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                 | Executed_Gtid_Set |
+------------------+----------+--------------+----------------------------------+-------------------+
| mysql-bin.000004 |    28125 | ufind_db     | information_schema,cluster,mysql |                   |
+------------------+----------+--------------+----------------------------------+-------------------+
1 row in set (0.00 sec)

如果执行这个步骤始终为 ** Empty set(0.00 sec) ** ,那说明前面的my.cnf没配置对。

Slave库

1.Slave配置

修改my.cnf:

log-bin=mysql-bin
server-id=3                                #不可与主库重复
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
replicate-do-db=ufind_db                   #同步数据库
replicate-ignore-db=mysql                  #忽略同步的数据库
log-slave-updates=1                        #io线程同步数据时也计入logbin中
slave-skip-errors=all                      #跳过错误
slave-net-timeout=60

开启线程连接主库:

mysql> stop slave;  #关闭Slave
mysql> change master to master_host='主库地址',master_port=主库的端口号,master_user='主库分配的用户',master_password='主库分配的密码',master_log_file='主库的File', master_log_pos=主库的Position;
mysql> start slave;  #开启Slave
2.验证
mysql> show slave statusG;

在输出的信息中如果出现以下两条则说明主从配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主从运维命令

master端:

show master status; #查看状态:
show processlist; #查看slave下mysql进程信息
reset master; #慎用,将清空日志及同步position

slave端:

show slave status;

show slave logs;

show processlist;

reset slave; #慎用,将清空slave配置信息、日志及同步position在从服务器上跳过错误事件

reset slave #清除日志同步位置标志,并重新生成master.info

show slave hosts #主机运行,看连入的从机的情况。

手动同步(有数据时配置主从时使用)

  1. 先对主库锁表

FLUSH TABLES WITH READ LOCK;

  1. 备份数据

mysqldump -uroot -p -hlocalhost > mysql.bak.sql

  1. 解锁主库

unlock tables;

  1. 查看主库的binlog文件和位置

show master status; 找出File和Position

  1. 使用scp命令把文件移动到从库

scp mysql.bak.sql root@192.168.128.101:/tmp/

  1. 在从库上停止同步

mysql> stop slave;

  1. 导入数据

mysql> source /tmp/mysql.bak.sql

  1. 设置从库的同步开始文件和开始位置

change master to master_host = ‘主库主机’, master_user = ‘同步用户名’, master_port=3306, master_password=’’, master_log_file = ‘第3步中获取的file’, master_log_pos=第3步中获取的position;

  1. 从库上启动同步并检查

mysql> start slave;

mysql> show slave statusG 查看:

原文地址:https://www.cnblogs.com/anning1994/p/10028035.html