最近线上服务器做了迁移,要做mysql主从,特意学习并记录下。
注:如果刚开始不是主从架构,主库单独跑了一段时间后要改为主从,那需要保证数据库data一致。
1. 主库编辑my.cnf
[mysqld] log-bin=mysql-bin server-id=1 #配一个唯一的ID编号,(2-2的32次幂)-1。 #设置要进行或不要进行主从复制的数据库名,同时也要在 Slave 上设定。 #binlog-do-db=数据库名1 #binlog-do-db=数据库名2 #binlog-ignore-db=数据库名1 #binlog-ignore-db=数据库名2 binlog-do-db=testdb
重启mysql 服务后,连接数据库。
mysql> grant replication slave on *.* to slaveuser@192.168.1.2 identified by '123456' ; mysql> flush privileges; mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000016 | 120 | testdb | | +------------------+----------+--------------+------------------+
记录下二进制日志的文件名及位置。
2. 从库编辑my.cnf
[mysqld] server-id=2 #唯一 #设置要进行或不要进行主从复制的数据库名,同时也要在 Master 上设定。 #replicate-do-db=数据库名1 #replicate-do-db=数据库名2 #replicate-ignore-db=数据库名1 #replicate-ignore-db=数据库名2 replicate-do-db=testdb
重启mysql 服务后,连接数据库。
mysql> change master to master_host='192.168.1.1',master_user='slaveuser',master_password='123456', master_log_file='mysql-bin.000016',master_log_pos=120; mysql> start slave; mysql> show slave status\G;
如显示如下,则成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_Db: testdb
3. Mysql主备复制实现工作原理
从上图来看,复制分成三步:
- master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
- slave将master的binary log events拷贝到它的中继日志(relay log);
- slave重做中继日志中的事件,将改变反映它自己的数据。
附一些问题的解决过程:
1). error:“/usr/sbin/mysqld: unknown variable 'master-host=10.1.4.154'”
原因是MySQL自5.1.7版本之后不支持master-host 类似的参数,需要在从库上执行:
change master to master_host='masterIP', master_user='slave', master_password='slvaePASS';
slave start;
2). slave status: "Slave_IO_Running:No"
解决方法: Mysql > stop slave; Mysql > set global sql_slave_skip_counter =1 ; Mysql > start slave;
3). Last_IO_Error: Got fatal error 1236 from master when reading data from binary log
对照master status 确认log文件及position数据是否正确。
4). Slave can not handle replication events with the checksum that master is configured to log
这个错误一般出现在master5.6,slave在低版本的情况下。这是由于5.6使用了crc32做binlog的checksum。除了把master的设置从crc32改到none
binlog-checksum = none [my.cnf]
5). 在SLAVE执行CHANGE MASTER时,出现ERROR 1201 (HY000): Could not initialize master!
mysql> slave stop; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> change master to master_host='192.168.100.10',master_user='replication',master_password='123456',master_log_file='updatelog.000004',master_log_pos=106; ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
修正问题:
mysql> slave stop; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> reset slave; Query OK, 0 rows affected,(0.00 sec) mysql> change master to master_host='192.168.100.10',master_user='replication',master_password='123456',master_log_file='updatelog.000004',master_log_pos=106; Query OK, 0 rows affected (0.05 sec) mysql> slave start; Query OK, 0 rows affected (0.00 sec)
6). 主从复制binlog问题,如果没有删除的配置,则会无限增长,严重占用磁盘空间。
expire_logs_days = 30 #有效期30天,之前的会被删除
7). 如果主数据库服务器已经存在用户数据,那么在进行主从复制时,需要做以下处理。
(1)主数据库锁表操作,不让数据再进行写入动作。 mysql>flush tables with read lock; (2)查看主数据库的状态 mysql>show master status; 记下File以及Position的值,以备从服务器使用。 (3)把主服务器的数据文件复制到从服务器,最好先用tar归档压缩处理一下 (4)取消主数据库锁定 mysql>unlock tables; 从服务器的操作和前面的步骤一样,略过。
相关推荐
mysql5.5 主从配置,可以使得mysql服务器配置更加简单,熟练
配置mysql5.5主从服务器(转)
mysql5.6-5.5主从备份 A服务器(主服务器Master):9.1.6.217 mysql:5.6 redhat5.8 B服务器(从服务器Slave):localhost mysql:5.5 win10
Windows,MySQL5.5,主从配置,主或从挂掉问题处理
MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能、更高可靠性要求的场合
mysql5.5源码主从复制搭建(以两台机器的单实例为例)
mysql5.5源码主从复制搭建(同一台机器双实例3306和3307)
主要介绍了MySQL 5.5主从同步设置笔记分享,需要的朋友可以参考下
mysql_5.5._下的主从模式.pdf
mysql_5.5._下的主从模式.docx
Mysql windows下 主从数据库配置,数据库版本mysql 5.5,包括测试程序和步骤
A B 为两台 MySQL 服务器,均开启二进制日志,数据库版本 MySQL 5.5 一、服务器参数 [A 服务器 192.168.1.100] server-id = 1 binlog-do-db = test binlog-ignore-db = mysql replicate-do-db = ...
一主一从: Master: OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.2 Slave: OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.3 修改主机Master配置文件 (/etc/my.cnf) 代码如下: [mysqld] //至少要有...
这里我以MySQL5.5为例来说一下MySQL的主从复制的原理: 首先由备节点的I/O线程负责向主节点请求数据,主节点验证通过以后会由dump线程把数据发送给备用节点。备用节点的I/O线程收到资源后会把把这些数据写入到中继...
实际配置MYSQL时写的文档,包括了配置时每一步的命令行语句,附上MYSQL主从复制,数据备份,远程访问权限等配置