mysql主从配置(Master-Slave)

默认环境:

一台主,一台从,端口3306设置防火墙例外,两台MySQL安装版本相同,这里使用的是MySQL5.7.34版本。

预先处理,导出需要同步数据库数据:

 mysqldump -uroot -p761479629@Lt -B HA > HA.sql

其中-B表示包含数据库创建语句以及其他创建语句。

主配置:

1、修改my.cnf配置

必须配置

server-id=1

log_bin=mysql-bin-master

可选配置(选择同步与不同步的数据库)

#选择需要同步的数据库为HA,不加以下这条默认全部数据库同步。

binlog-do-db=student

#选择不同步数据库,建议设置(避免同步导致登录链接数据库账号混乱)

binlog-ignore-db=mysql

binlog_ignore_db=information_schema

2、创建同步账户

#创建一个名为tongbu的账号用于远程连接数据库进行同步

 grant replication slave on *.* to 'tongbu'@'%' identified by '761479629Lt';

 flush privileges;

 提示弱密码处理方法:(重启MySQL后失效)

set global validate_password_policy=0; 

set global validate_password_length=4;

*可选*关闭安全策略

5.7以上版本 关闭密码安全策略插件:在my.cnf添加 validate-password=off 重启mysql。

3、重启MySQL,查看主服务器当前二进制日志名和偏移量

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin-master.000001 |     4406 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.04 sec)

可选操作:

暂时关闭同步命令:

set sql_log_bin=off;

查看二进制log-bin事件

mysql> show binlog events\G;

从配置:

0、导入需要同步的数据库(由于导出时加了 -B,SQL文件包含数据库创建语句以及其他创建语句)

mysql -uroot -p761479629@Lt < HA.sql

1、修改my.cnf配置

必须配置

server-id=2

2、测试同步账号是否能登录

mysql -utongbu -p761479629Lt -h 192.168.3.63

3、命令设置同步参数

change master to master_host='192.168.3.63',master_user='tongbu',master_password='761479629Lt',master_log_file='mysql-bin-master.000001',master_log_pos=4406;

4、启动slave进程,查看同步状态

网上有些使用slave start; 会报错提示有语法错误,请更换使用 start slave;

mysql> slave start;

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slave start' at line 1

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

查看同步状态:

show slave status\G;

确保这两项正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

4、数据库测试,写几条数据测试下,能同步就可以了

==========================================================================

同步主库已有数据到从库

主库操作:

1、停止主库的数据更新操作

mysql>flush tables with read lock;

2、新开终端,生成主数据库的备份(导出数据库)

[root@zhoujietest ~]# mysqldump -uroot -proot student > student.sql

3、将备份文件传到从库

[root@zhoujietest ~]# scp student.sql [email protected]:/root/

4、主库解锁

mysql>unlock tables;

从库操作:

1、停止从库slave

mysql>stop slave;

2、新建数据库student

mysql> create database student default charset utf8;

3、导入数据

[root@ops-dev ~]# mysql -uroot -proot student<student.sql 

4、查看从库已有该数据库和数据

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

|student |

| mysql |

| performance_schema |

| test |

+--------------------+

==============================================================================

排错思路:

Slave_IO_Running :一个负责与主机的io通信

Slave_SQL_Running:负责自己的slave mysql进程

如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。

在主服务器上看二进制日志事件列表

mysql> show binlog events \G

从服务器执行MySQL命令下:

mysql> stop slave;             #先停止slave服务

mysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1164;

#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果

排错思路:

1、二进制日志没有开启

2、IPTABLES 没有放开端口

3、对应的主机 IP地址写错了

SQL线程出错

1、主从服务器数据库结构不统一

出错后,数据少,可以手动解决创建插入,再更新slave状态。

注:如果主上误删除了。那么从上也就误删除了。  #因此主上要定期做mysqldump备份。

版权声明:
作者:WaterBear
链接:https://l-t.top/1793.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>