mysql主从同步

下面全部来自于gpt的内容,排版不太好将就看吧,根据gpt的答案是成功的配置好了,

有一点要注意:主库有数据, 从库为空库的话,需要把主库的数据先拷贝一份到从库(需要停掉主库,否则导入到从库后,主库的MASTER_LOG_POS又变了),然后在开始主从同步就没啥问题了   (对于这个问题,本人对于同步了解也不多,所以在使用上又不足之处欢迎留言指出)

-----

以下是一个MySQL主从同步的配置案例,只同步指定的数据库:

  1. 确保在主服务器和从服务器上都安装了MySQL数据库软件。
  2. 在主服务器上,编辑MySQL配置文件 my.cnf ,在 [mysqld] 段添加如下配置:
 
  

pythonCopy code

server-id=1 log-bin=mysql-bin binlog-do-db=your_database_name

mysql主从同步_第1张图片

其中,server-id 的值应该在主服务器和从服务器上都不同。log-bin 是二进制日志文件的名称前缀,binlog-do-db 指定要同步的数据库名称。

  1. 重启 MySQL 服务以使配置生效。

  2. 在从服务器上,编辑 MySQL 配置文件 my.cnf ,在 [mysqld] 段添加如下配置:

 
  

pythonCopy code

server-id=2 relay-log=mysql-relay-bin replicate-do-db=your_database_name

mysql主从同步_第2张图片

其中,server-id 的值应该在主服务器和从服务器上都不同。relay-log 是从服务器用于存储中继日志的文件名称前缀,replicate-do-db 指定要同步的数据库名称。

  1. 重启 MySQL 服务以使配置生效。

  2. 在主服务器上创建一个用于同步的 MySQL 用户,并授权给该用户可以在指定的数据库中进行读取和复制操作。

sqlCopy code

CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';

mysql主从同步_第3张图片

其中,'%' 表示可以从任何主机连接到 MySQL 服务器。

  1. 在从服务器上启动 MySQL 客户端,并执行如下命令:
 
  

sqlCopy code

CHANGE MASTER TO MASTER_HOST='master_server_ip_address', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; START SLAVE;

mysql主从同步_第4张图片

其中,MASTER_HOST 指定主服务器的 IP 地址,MASTER_USER 和 MASTER_PASSWORD 分别是在主服务器上创建的用于同步的 MySQL 用户的用户名和密码,MASTER_LOG_FILE 和 MASTER_LOG_POS 分别是从服务器同步数据时需要从主服务器读取的二进制日志文件和偏移量。这些值可以在主服务器上执行 SHOW MASTER STATUS 命令获取。

完成以上步骤后,主服务器上指定的数据库中的数据将会同步到从服务器上。

----------

在MySQL主从同步配置中,如果主服务器的MySQL实例使用的是默认的端口号(3306),则在配置中不需要指定端口号,直接使用主服务器的IP地址或主机名即可。

但是,如果主服务器的MySQL实例使用了非默认的端口号,那么在配置中就需要指定正确的端口号。例如,如果主服务器的MySQL实例使用的是3307端口,则在从服务器上启动MySQL客户端连接主服务器时,需要指定相应的端口号,例如:

 
  

sqlCopy code

CHANGE MASTER TO MASTER_HOST='master_server_ip_address', MASTER_PORT=3307, MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; START SLAVE;

mysql主从同步_第5张图片

在上面的配置中,MASTER_PORT 指定了主服务器MySQL实例的端口号为3307。因此,在实际的配置中,需要根据实际情况指定正确的主服务器IP地址和端口号。

----------

在MySQL主从同步中,可以使用以下方式来查看同步状态,以确认已经开始同步:

  1. 查看主服务器上的二进制日志文件和位置信息:

可以使用以下命令在主服务器上查看当前正在写入的二进制日志文件及其位置信息:

 
  

sqlCopy code

SHOW MASTER STATUS;

该命令会输出当前正在写入的二进制日志文件名和位置信息,例如:

 
  

diffCopy code

+------------------+-----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+-----------+--------------+------------------+ | mysql-bin.000001 | 107 | test | | +------------------+-----------+--------------+------------------+

mysql主从同步_第6张图片

其中,File 表示当前正在写入的二进制日志文件名,Position 表示该文件的写入位置,Binlog_Do_DB 表示需要同步的数据库名称,Binlog_Ignore_DB 表示不需要同步的数据库名称。如果需要同步的是所有的数据库,可以将 Binlog_Do_DB 设置为 *。

  1. 查看从服务器上的同步状态:

可以使用以下命令在从服务器上查看当前的同步状态:

 
  

sqlCopy code

SHOW SLAVE STATUS;

该命令会输出当前的同步状态信息,包括已经同步的二进制日志文件名和位置信息,例如:

 
  

yamlCopy code

*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.101 Master_User: replication_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 107 Relay_Log_File: mysqld-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ...

mysql主从同步_第7张图片

其中,Master_Host 表示主服务器的IP地址或主机名,Master_User 和 Master_Port 表示主服务器的登录用户名和端口号,Master_Log_File 和 Read_Master_Log_Pos 表示当前正在同步的二进制日志文件名和位置信息,Relay_Log_File 和 Relay_Log_Pos 表示从服务器的中继日志文件名和位置信息,Slave_IO_Running 和 Slave_SQL_Running 分别表示从服务器的 IO 线程和 SQL 线程的运行状态。

如果 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,表示从服务器已经成功连接到主服务器并开始同步。

-------

错误1:

error connecting to master '[email protected]:port' - retry-time: 60 retries: 2 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

这个错误信息是 MySQL 数据库连接失败的错误信息,它的具体含义是:

在连接到名为 'dcdw_sync' 的主服务器时(该主服务器的 IP 地址为 xxx.xxx.xxx.xxx,端口号为 port),连接出现了错误。具体错误信息为:认证插件 'caching_sha2_password' 报告了一个错误,该错误要求使用安全连接进行身份验证。也就是说,MySQL 8.0 之后的版本默认使用 caching_sha2_password 加密插件来进行身份验证,但是该插件要求必须使用安全连接(即 SSL/TLS)进行连接。

因此,为了解决这个问题,需要在连接到该主服务器时,使用安全连接(即开启 SSL/TLS 加密连接),或者在主服务器上将加密插件更改为旧版的 mysql_native_password 插件,或者在从服务器上配置允许使用 caching_sha2_password 加密插件,并开启 SSL/TLS 加密连接。

具体来说,可以参考以下步骤进行解决:

  1. 开启 SSL/TLS 加密连接:在连接到主服务器时,添加 --ssl 参数,例如:
 
  

cssCopy code

mysql -u dcdw_sync -p -h 58.211.53.6 -P 23306 --ssl

  1. 将加密插件更改为 mysql_native_password 插件:在主服务器上使用以下命令更改加密插件:
 
  

sqlCopy code

ALTER USER 'dcdw_sync'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

mysql主从同步_第8张图片

  1. 允许使用 caching_sha2_password 加密插件并开启 SSL/TLS 加密连接:在从服务器上使用以下命令进行配置:
 
  

sqlCopy code

ALTER USER 'account'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'account'@'%' REQUIRE SSL;

mysql主从同步_第9张图片

需要注意的是,为了保证安全性,建议使用 SSL/TLS 加密连接来进行数据传输。

--------------------

错误2:

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000002, end_log_pos 587549124. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

协调器(Coordinator)停止了工作,因为有一个或多个工作者(Worker)出现了错误。最近的失败是 Worker 1 在执行事务 'ANONYMOUS' 时出现了问题,具体出错位置在主服务器的二进制日志(mysql-bin.000002)中,位置为 587549124。建议查看错误日志和/或 performance_schema.replication_applier_status_by_worker 表格,以获取更多关于这个或其他故障的详细信息。

根据这个错误提示,可以采取以下步骤进行故障排查:

  1. 查看错误日志:在 MySQL 主服务器和从服务器上查看错误日志,查看是否有其他相关的错误信息。

  2. 查看 replication_applier_status_by_worker 表格:在从服务器上使用以下命令查看此表格:

 
  

sqlCopy code

SELECT * FROM performance_schema.replication_applier_status_by_worker;

mysql主从同步_第10张图片

这个表格可以提供有关每个工作者的详细信息,包括其状态、错误信息等。

  1. 检查主从服务器配置是否正确:检查主从服务器的配置文件和参数设置是否正确,例如 server-id、log-bin、binlog_format、binlog_do_db 等参数设置是否正确。

  2. 检查网络连接是否正常:检查主从服务器之间的网络连接是否正常,例如主服务器是否可以正常连接,从服务器是否可以正常连接主服务器等。

  3. 检查主从服务器的版本是否一致:检查主从服务器的 MySQL 版本是否一致,如果不一致,可能会导致主从同步出现问题。

需要根据具体情况进行故障排查和解决。

------

主从同步可以自动创建表吗

主从同步可以自动创建表。在 MySQL 主从同步中,当从服务器启动时,如果从服务器中没有与主服务器中相同的数据库或表,则会自动创建相应的数据库或表。

但是,在自动创建表时需要注意以下几点:

  1. 主服务器和从服务器的 MySQL 版本必须一致,否则可能会导致自动创建表失败。

  2. 自动创建的表只包含表结构,不包含数据,如果需要同步数据,则需要在主服务器上插入数据。

  3. 如果需要在从服务器中修改自动创建的表的结构,应该在主服务器中进行修改,并同步到从服务器中。

  4. 在自动创建表时,需要注意主从服务器之间的字符集是否一致,否则可能会导致数据不一致的问题。

总之,主从同步可以自动创建表,但需要注意上述事项,以确保同步的正确性和完整性。

-------

如果需要在 MySQL 主从同步中从头同步,可以采取以下步骤:

  1. 停止从服务器的复制进程。

可以使用以下命令停止从服务器的复制进程:

 
  

vbnetCopy code

STOP SLAVE;

  1. 清除从服务器上的复制信息。

可以使用以下命令清除从服务器上的复制信息:

 
  

Copy code

RESET SLAVE;

  1. 在主服务器上导出数据。

可以使用以下命令在主服务器上导出需要同步的数据库或表的数据:

 
  

cssCopy code

mysqldump -u username -p password --opt database > data.sql

其中,username 和 password 分别为主服务器的用户名和密码,database 为需要同步的数据库名称,data.sql 为导出的数据文件名。

  1. 在从服务器上导入数据。

可以使用以下命令在从服务器上导入主服务器导出的数据:

 
  

cssCopy code

mysql -u username -p password database < data.sql

其中,username 和 password 分别为从服务器的用户名和密码,database 为需要同步的数据库名称,data.sql 为导出的数据文件名。

  1. 开启从服务器的复制进程。

可以使用以下命令开启从服务器的复制进程:

sqlCopy code

START SLAVE;

执行以上步骤后,从服务器将会从头开始同步主服务器的数据,直至同步完成。需要注意的是,在从服务器上导入数据时,如果需要同步的数据库或表已经存在,则需要先手动删除这些数据库或表,以确保从头开始同步。

--------

mysql主从同步的延迟是多少?

MySQL主从同步的延迟很难给出一个固定的数值,因为它受到多种因素的影响。以下是影响MySQL主从同步延迟的几个因素:

  1. 网络延迟 - 如果主服务器和从服务器之间的网络连接速度慢,则同步延迟可能会更高。

  2. 主服务器负载 - 如果主服务器负载非常高,则同步延迟可能会增加。

  3. 从服务器负载 - 如果从服务器负载非常高,它可能会导致同步延迟较高。

  4. 数据库的大小和复杂性 - 如果一个大型和复杂的数据库需要同步,那么同步延迟可能更高。

  5. 数据库复制配置 - 通过设置合适的主从同步配置,如二进制日志格式、同步方式等,能够有效地减少同步延迟。

一般情况下,MySQL主从同步延迟在几毫秒到几秒钟之间是比较正常的。如果同步延迟超过数十秒或数分钟,就需要进行优化或检查硬件配置是否充足。

你可能感兴趣的:(mysql,数据库,服务器)