目录

一.master主节点的服务器my.cnf配置

1.1:开启的binlog日志

二.node01节点从库服务器my.cnf配置

2.1:开启的binlog日志

三.主节点上创建复制账号并创建权限

3.1:初始化数据,备份主库,在从库上恢复,让从库与主库在某一位置时达到同步。

3.2:查看testdata.dmp ,得到binlog文件名和position 号

3.3:  testdata.dmp复制到从服务器node01上,恢复从主库导出来的数据到node01节点。

3.4: 在从库上执行MySQL配置主从命令

3.4.1:  在从节点执行:start slave 命令,启动从服务复制功能。

3.4.2:查看主从复制状态命令

3.4.3:Slave_IO_Running或者Slave_SQL_Running不为Yes状态的解决方法

3.4.4: 在从节点执行:stop slave 命令,停止从服务复制功能(知晓)。

3.4.5:主从服务器测试验证,验证创库,新建表,添加数据,删除数据,修改数据。

4. 如果需要禁用主从复制,只需要在从服务器上执行命令

5.清空从库的所有配置信息的命令

四.如何保证主从复制数据一致性

4.1:在master主库上修改配置参数

4.2:在savle从库上修改配置参数

4.3:如何避免人为误操作在从库中修改数据

4.4: 从节点将无法修改数据,不影响主从同步

五.Mysql离线安装包下载


提示:主服务器master,从服务器node01。

一.master主节点的服务器my.cnf配置

[mysqld]
port=33306
 datadir=/datah/data/mysqldata/mysql
 socket=/var/lib/mysql/mysql.socksymbolic-links=0
log-error=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pidcharacter-set-server=utf8
 collation-server=utf8_general_ci
 lower_case_table_names=1
 init_connect='SET NAMES utf8'
 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 max_connections=5000
 wait_timeout=20000
 max_user_connections=5000
 max_allowed_packet=128M
 thread_stack=262144
#skip-grant-tables
 #主库
 ################ settings start ###################
 server-id=100             #主库server-id
 log-bin=mysql-bin       #开启binlog日志
 binlog_format=row      #row模式,保证后期不会出现数据不一致的情况
 ################ settings end ###################


 

1.1:开启的binlog日志

dockers mysql 主从复制代码 mysql主从复制搭建流程_数据

二.node01节点从库服务器my.cnf配置

[mysqld]
  
 port=33306
 datadir=/datah/data/mysqldata/mysql
 socket=/var/lib/mysql/mysql.sock
  
 symbolic-links=0
  
 log-error=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pid
  
 character-set-server=utf8
 collation-server=utf8_general_ci
 lower_case_table_names=1
 init_connect='SET NAMES utf8'
 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 max_connections=5000
 wait_timeout=20000
 max_user_connections=5000
 max_allowed_packet=128M
 thread_stack=262144
  
 #skip-grant-tables#从库
 ################ settings stat ###################
 log-bin=mysql-bin    #[必须]启用二进制日志
 server-id=101          #[必须]服务器唯一ID
 binlog_format=row
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 log_slave_updates=on
 relay_log_recovery=1
 ################ settings end ###################

2.1:开启的binlog日志

dockers mysql 主从复制代码 mysql主从复制搭建流程_数据库_02

三.主节点上创建复制账号并创建权限

grant replication slave on *.* to 'mysync'@'%' identified by 'Abc123456';
flush privileges;

dockers mysql 主从复制代码 mysql主从复制搭建流程_数据_03

3.1:初始化数据,备份主库,在从库上恢复,让从库与主库在某一位置时达到同步。

这里用 mysqldump 做数据的备份导出操作

命令:

mysqldump -uroot -pAbc123456 --single-transaction --master-data=2 --databases testdata>/tmp/testdata.dmp

备注:--databases testdata 表示备份testdata数据库。如果数据量大,使用Xtrabackup 进行热备份也是可以的。

--single-transaction: 是为了得到一个一致性备份,在导出数据之前开启一个事务,由数据库保证单次导出数据的一致性,此时针对Innodb表所有的读写操作均不会被阻塞。

--master-data=2: 让备份出来的文件中记录备份这一时刻的binlog文件position号。

3.2:查看testdata.dmp ,得到binlog文件名和position 号

more /tmp/testdata.dmp

 

dockers mysql 主从复制代码 mysql主从复制搭建流程_服务器_04

3.3:  testdata.dmp复制到从服务器node01上,恢复从主库导出来的数据到node01节点。

scp testdata.dmp root@node01:/tmp/
[root@node01 tmp]# mysql -uroot -pAbc123456 </tmp/testdata.dmp 
 mysql: [Warning] Using a password on the command line interface can be insecure.

dockers mysql 主从复制代码 mysql主从复制搭建流程_mysql_05

3.4: 在从库上执行MySQL配置主从命令

change master to master_host='172.16.25.205',
master_user='mysync',
master_password='Abc123456',
master_port=33306,
master_log_file='mysql-bin.000001',
master_log_pos=37611;

dockers mysql 主从复制代码 mysql主从复制搭建流程_mysql_06

 flush privileges;

备注:如果有ERROR 1776(HY000)报错,执行: change master to master_auto_position=0

3.4.1:  在从节点执行:start slave 命令,启动从服务复制功能。

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

3.4.2:查看主从复制状态命令

mysql> show slave status \G;

dockers mysql 主从复制代码 mysql主从复制搭建流程_数据_07

备注:如果Slave_IO_Running 和 Slave_SQL_Running 进程必须正常运行,既Yes状态,否则都是错误的状态(只要一个是NO的就属于错误的)

Slave_IO_Running: Yes          // 必须是Yes
Slave_SQL_Running: Yes       // 必须是Yes

 Master_Log_File: mysql-bin.000001  // 是当前主库的二进制文件

Read_Master_Log_Pos: 37770          //是正在读取主库当前二进制的日志位置

Exec_Master_Log_Pos: 37770         //是执行到主库的二进制的日志中的位置

Seconds_Behind_Master: 0             //判断节点是否有延迟

完成以上步骤,主从服务器配置完成。

3.4.3:Slave_IO_Running或者Slave_SQL_Running不为Yes状态的解决方法

mysql> stop slave;
 Query OK, 0 rows affected (0.02 sec)mysql> change master to master_auto_position=0;
 Query OK, 0 rows affected (0.11 sec)mysql> start slave;
 Query OK, 0 rows affected (0.00 sec)mysql> show slave status \G;


 

3.4.4: 在从节点执行:stop slave 命令,停止从服务复制功能(知晓)。

mysql> stop slave;
 Query OK, 0 rows affected (0.02 sec)

3.4.5:主从服务器测试验证,验证创库,新建表,添加数据,删除数据,修改数据。

  • 验证创建数据库,同步成功。
  • 验证新建表同步成功。
  • 验证添加,修改,删除数据成功。

4. 如果需要禁用主从复制,只需要在从服务器上执行命令

mysql> stop slave;
 Query OK, 0 rows affected (0.02 sec)

关闭主从同步即可。

5.清空从库的所有配置信息的命令

mysql> reset slave all;
 Query OK, 0 rows affected (0.02 sec)

四.如何保证主从复制数据一致性

4.1:在master主库上修改配置参数

innodb_flush_log_at_trx_commit=1
 sync_binlog=1

备注:确保数据高安全。

4.2:在savle从库上修改配置参数

master_info_repository="TABLE"
relay_log_info_repository="TABLE"
relay_log_recovery=1

备注:确保在slave上和复制相关的元数据表也采用InnoDB引擎,受到InnoDB事务安全的保护,并开启relay-log自动修复机制,这样发生宕机的时候根据relay_log_info中记录的已执行的binlog的位置从master上重新抓取回来再次应用,以避免数据丢失的可能性。

4.3:如何避免人为误操作在从库中修改数据

从节点上授权只读模式

set global read_only=1

备注:只读模式不会影响slave同步复制数据的功能,但是此时限制对于拥有的super权限用户无效,MySQL5.7版本增加了新的参数,使用set global super_read_only=ON限制超管用户。

mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)

mysql> set global super_read_only=ON;
Query OK, 0 rows affected (0.00 sec)

4.4: 从节点将无法修改数据,不影响主从同步

dockers mysql 主从复制代码 mysql主从复制搭建流程_数据库_08

五.Mysql离线安装包下载

温馨提示:如果小编分享的对你有所帮助的话,麻烦点个赞,鼓励一下,小编也不容易。