首页 > 数据库 >mysql主从同步详细教程

mysql主从同步详细教程

时间:2023-11-28 17:33:40浏览次数:37  
标签:教程 同步 slave log master mysql 从库 主从

mysql主从同步详细教程

 

1、安装好主数据库和从数据库,这个大家肯定都会,如果不是很明白,可以参考我前面的安装教程。

例子:

  假如我需要同步test1、test2数据库 

 

  系统:centos7

  主库主机:192.168.1.252 

  从库主机:192.168.1.251   

  端口都是:3306

2、主数据库基本配置

  (1)、打开主数据的配置文件my.cnf,添加这几项

复制代码
server_id = 1                #唯一标识,主库从库不能重复
log_bin = mysql-bin          #开启日志
binlog_format=MIXED         #日志记录的格式
max_binlog_size = 512M     #单个日志文件最大
expire_logs_day = 3          #日志有效期(天)
binlog_do_db = test1,test2    #日志记录那些数据库
binlog_ignore_db = mysql,performance_schema,information_schema #日志记录忽略那些数据库的
复制代码
(2)、重启mysql (service mysql restart)
(3)、在主库创建一个用于同步的用户(当然也可以不创建,直接用已有的,不过为了安全建议还是创建一个)
 grant replication slave on *.* to 'slave'@'192.168.1.253' identified by '123456';

  这个slave用户密码为123456,但有同步的权限,且只能在192.168.1.253上连接。

  如果主库里已经数据库数据了,那还得进行以下操作:

    刷新表然后锁表(只允许查数据不允许写数据):

flush tables with read lock;

    然后备份要同步的数据库的数据,然后拷贝到从库里面

mysqldump -uroot -p test1>test1.sql;
mysqldump -uroot -p test2>test2.sql;
#从库要先创建数据库test1和test2,然后导入数据
mysql -uroot -p test1<test1.sql;
mysql -uroot -p test1<test2.sql;

  主库执行:show master status; 记下 Position 和 File 的值,等下进行从库配置要用到。

  +------------------+----------+--------------+------------------+
  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+--------------+------------------+
  | mysql-bin.000023 | 2720 | test1,test2 | mysql 
  +------------------+----------+--------------+------------------+

3、从库配置信息

  (1)、修改配置文件my.cnf

复制代码
server_id = 2
log_bin = mysql-bin	    #开启日志
binlog_format=MIXED	    #日志记录的格式
max_binlog_size = 512M     #单个日志文件最大
expire_logs_days = 3	   #日志有效期(天)
replicate_do_db = test1,test2 #是在slave上配置,指定slave要复制哪个库
replicate-ignore-db=mysql,performance_schema,information_schema #是在slave上配置,指定slave要忽略哪个库
relay_log_recovery = 1     #从库建议开启,有利于数据一致性
log_slave_updates = 1      #如果从库还会用做主库,建议开启
复制代码

  (2)、重启从库,执行如下命令(先停止同步,然后设置同步信息,master_log_file 和 master_log_pos就是我们主库上面的)

复制代码
stop slave;
change master to
master_host='192.168.1.252',
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000023', 
master_log_pos=2720;
start slave;
复制代码

  (3)、从库执行:show slave status\G; 查看是否正常

   主要看这几项;

复制代码
lave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_Log_File: mysql-bin.000023
Relay_Master_Log_File: mysql-bin.000023
Read_Master_Log_Pos: 2720
Exec_master_log_pos: 2720
复制代码

4、最后回到主库解锁表 

unlock tables;

5、主从不同步了解决办法

方法一:忽略错误后,继续同步 
  该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 
  解决: 
    stop slave; #表示跳过一步错误,后面的数字可变 
    set global sql_slave_skip_counter =1; 
    start slave; 
  之后再用mysql> show slave status\G 查看: 
  Slave_IO_Running: Yes 
  Slave_SQL_Running: Yes 

方式二:重新做主从,完全同步 
  该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 
  解决步骤如下: 
    1.先进入主库,进行锁表,防止数据写入 
    使用命令: 
    mysql> flush tables with read lock; 
    注意:该处是锁定为只读状态,语句不区分大小写 
    2.进行数据备份 
      #把数据备份到mysql.bak.sql文件 
      mysqldump -uroot -p -hlocalhost > mysql.bak.sql 
      这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失 
    3.查看master 状态 
      mysql> show master status; 
      +-------------------+----------+--------------+-------------------------------+ 
      | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
      +-------------------+----------+--------------+-------------------------------+ 
      | mysqld-bin.000001 | 3260 | | mysql,test,information_schema | 
      +-------------------+----------+--------------+-------------------------------+ 

    4.把mysql备份文件传到从库机器,进行数据恢复 
      #使用scp命令 
      [root@server01 mysql]# scp mysql.bak.sql [email protected]:/tmp/ 
    5.停止从库的状态 
      mysql> stop slave; 
    6.然后到从库执行mysql命令,导入数据备份 
      mysql> source /tmp/mysql.bak.sql 
    7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项 
      change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260; 
    8.重新开启从同步 
      mysql> start slave; 
    9.查看同步状态 
      mysql> show slave status\G 查看: 
      Slave_IO_Running: Yes 
      Slave_SQL_Running: Yes

           10.主库解锁

    mysql> unlock tables;

 

6、pt-table-checksum 和 pt-table-sync

  这个两个软件也是很方便,大家可以去了解一下  

  pt-table-checksum:在主(master)上通过执行校验的查询对复制的一致性进行检查,对比主从的校验值,从而产生结果。DSN指向的是主的地址,该工具的退出状态不为零,如果发现有任何差别,或者如果出现任何警告或错误,更多信息请查看官方资料。
  pt-table-sync: 高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

转载自:https://www.cnblogs.com/myIvan/p/10164926.html

标签:教程,同步,slave,log,master,mysql,从库,主从
From: https://www.cnblogs.com/MingGyGy-Castle/p/17862517.html

相关文章

  • MySQL5.6建索引时遇到 Specified key was too long; max key length is 767 bytes错误
    解决方法//查看showvariableslike"innodb_large_prefix";showvariableslike"innodb_file_format"; //修改最大索引长度限制 setglobalinnodb_large_prefix=1;或  setglobalinnodb_large_prefix=on;setglobalinnodb_file_format=BA......
  • 无涯教程-F# - 数据类型
    F#中的数据类型可以分类如下-整数类型浮点类型文本类型其他类型整体数据类型下表提供了F#的整数数据类型,这些基本上是整数数据类型。F#TypeSizeRangeExampleRemarkssbyte1byte-128to12742y-11y8-bitsignedintegerbyte1byte0to25542uy200uy8-......
  • ​​MySQL 指令​​
    MySQL指令基本概念SQL指令SQL指令是用于访问和处理数据库的标准的计算机语言。对于MySQL等常用数据库都可以通过使用SQL访问和处理数据系统中的数据。注意事项SQL对大小写不敏感。标识符应避免与关键字重名!可用反引号(`)为标识符包裹。注释单行注释:#注释内容多行注释:/*......
  • 无涯教程-MySQL String Functions函数
    Sr.No.Name&Description1ASCII()返回最左边字符的数值2BIN()返回参数的字符串表示形式3BIT_LENGTH()返回参数的长度(以位为单位)4CHAR_LENGTH()返回参数中的字符数5CHAR()返回传递的每个整数的字符6CHARACTER_LENGTH()CHAR_LENGTH()的同义词7......
  • 无涯教程-MySQL Numeric Functions函数
    MySQL数值函数主要用于数值运算和/或数学计算。下表详细介绍了MySQL实现中可用的数值函数。Sr.No.Name&Description1ABS()返回数值表达式的绝对值。2ACOS()返回数值表达式的反余弦值。如果该值不在-1到1之间,则返回NULL。3ASIN()返回数字表达式的反正弦值。如......
  • MySQL5.7到8.0的升级迁移!1分钟搞定MySQL多版本数据迁移
    在上个月,MySQL5.7正式结束了生命周期,即EOL(EndofLife),意味着Oracle将不再为MySQL5.7提供技术支持,包括Bug修复或安全漏洞,大大增加了使用数据库的风险。在全球关系型数据库市场中,MySQL市场份额最高,在MySQL各版本使用中,5.7仍占据大部分比例,其次是5.6和8.0。因此,此次MySQL5......
  • mysql 报错which is not functionally dependent on columns in GROUP BY clause; thi
    Expression#2ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'd.Id'whichisnotfunctionallydependentoncolumnsinGROUPBYclause;thisisincompatiblewithsql_mode=only_full_group_bywindow系统中,服务中找到mysql服务"......
  • Flask-SQLAlchemy flask-migrate mysql用法记录
    一、简介二、内容三、问题 一、简介Flask-SQLAlchemy是一个为Flask应用增加SQLAlchemy支持的扩展。它致力于简化在Flask中SQLAlchemy的使用。SQLAlchemy是目前python中最强大的ORM框架,功能全面,使用简单。ORM优缺点优点有语法提示,省去自己拼写SQL,保......
  • SQL Server2022安装图文教程
      一:下载 本次安装测试系统环境:    1、官网下载链接https://www.microsoft.com/zh-cn/sql-server/sql-server-downloadsSQLServer下载|Microsoft    2、在下载目录中找到下面这个小的安装包SQL2022-SSEI-Dev.exe,运行开始下载SQLserver;   二:安装SqlServer2022......
  • php mysql操作
    连接数据库mysqli_connect()mysql(host,username,password,dbname,port,socket);host:主机名或IP地址username:mysql用户名password:mysql密码dbname:使用的数据库port:mysql服务器的端口号socket:规定socket或使用已命名pipe断开数据库连接mysqli_close()boolmysqli_clo......