MySQL主从复制通过配置主库启用二进制日志、创建复制用户并获取日志位置,从库设置server-id并连接主库同步数据,实现读写分离与数据备份。

MySQL主从复制,简单来说,就是把一个MySQL服务器(主服务器)的数据复制到另一个或多个MySQL服务器(从服务器)上。这样做的好处显而易见:读写分离,提升性能;数据备份,提高可用性;分析报表,减轻主库压力等等。接下来,我们就一步步看看如何搭建MySQL主从复制。
解决方案
配置主服务器(Master)
修改MySQL配置文件(my.cnf或my.ini)
找到你的MySQL配置文件,通常在
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/my.cnf
在
[mysqld]
server-id = 1 # 每个服务器的唯一ID,主服务器通常设置为1 log_bin = mysql-bin # 启用二进制日志,这是主从复制的关键 binlog_do_db = your_database_name # (可选) 只复制指定的数据库 #binlog_ignore_db = your_database_name # (可选) 忽略指定的数据库 #binlog_format = ROW # 推荐使用ROW模式,保证数据一致性
server-id
log_bin
binlog_do_db
binlog_ignore_db
binlog_format
ROW
STATEMENT
MIXED
ROW
重启MySQL服务
修改配置文件后,需要重启MySQL服务才能使配置生效。
sudo systemctl restart mysql
创建复制用户并授权
登录到MySQL服务器,创建一个专门用于复制的用户,并授予其必要的权限。
CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
'repl'@'%'
repl
'%'
'your_password'
REPLICATION SLAVE
FLUSH PRIVILEGES
锁定主服务器并获取二进制日志信息
在开始复制之前,需要锁定主服务器,并获取当前的二进制日志文件名和位置。
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
SHOW MASTER STATUS
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+
记录下
File
Position
解锁主服务器
获取二进制日志信息后,解锁主服务器。
UNLOCK TABLES;
备份主服务器数据(可选)
为了保证数据一致性,建议在配置从服务器之前,备份主服务器的数据。可以使用
mysqldump
mysqldump -u root -p --all-databases > all_databases.sql
或者,只备份需要复制的数据库:
mysqldump -u root -p your_database_name > your_database_name.sql
配置从服务器(Slave)
修改MySQL配置文件(my.cnf或my.ini)
找到你的MySQL配置文件,在
[mysqld]
server-id = 2 # 每个服务器的唯一ID,从服务器通常设置为大于1的数字 #relay_log = relay-log # (可选) 指定中继日志的文件名前缀,默认是主机名 #relay_log_index = relay-log.index # (可选) 指定中继日志索引文件的文件名 #read_only = 1 # (可选) 设置从库只读
server-id
relay_log
relay_log_index
read_only = 1
重启MySQL服务
修改配置文件后,需要重启MySQL服务才能使配置生效。
sudo systemctl restart mysql
配置从服务器连接到主服务器
登录到从服务器的MySQL,使用以下命令配置从服务器连接到主服务器:
CHANGE MASTER TO MASTER_HOST='your_master_ip', MASTER_USER='repl', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', # 替换为主服务器的二进制日志文件名 MASTER_LOG_POS=154; # 替换为主服务器的二进制日志位置
MASTER_HOST
MASTER_USER
MASTER_PASSWORD
MASTER_LOG_FILE
MASTER_LOG_POS
启动复制
START SLAVE;
检查复制状态
SHOW SLAVE STATUS\G
检查
Slave_IO_Running
Slave_SQL_Running
Yes
Last_Error
如果
Last_Error
MASTER_LOG_FILE
MASTER_LOG_POS
恢复主服务器数据(如果备份过)
如果在配置从服务器之前备份了主服务器的数据,现在可以在从服务器上恢复数据。
mysql -u root -p < all_databases.sql
或者,只恢复需要复制的数据库:
mysql -u root -p your_database_name < your_database_name.sql
测试复制
在主服务器上创建一个新的数据库或表,然后在从服务器上检查是否已经同步。
-- 在主服务器上 CREATE DATABASE test_replication; USE test_replication; CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(255)); INSERT INTO test_table (id, name) VALUES (1, 'test'); -- 在从服务器上 USE test_replication; SELECT * FROM test_table;
如果从服务器上能够看到主服务器上创建的数据库和表,并且数据已经同步,那么恭喜你,MySQL主从复制已经成功搭建!
pt-table-sync
ROW
Seconds_Behind_Master
server-id
server-id
如何监控MySQL主从复制的状态?
SHOW SLAVE STATUS
Slave_IO_Running
Slave_SQL_Running
Seconds_Behind_Master
Last_Error
SHOW SLAVE STATUS
主从复制的模式有哪些?各有什么优缺点?
选择哪种复制模式,取决于具体的业务需求和场景。单向复制适用于读多写少的场景,双向复制适用于高可用性要求的场景,级联复制适用于主服务器压力较大的场景,多源复制适用于需要聚合多个数据源的场景。
以上就是mysql如何创建主从复制数据库_mysql创建主从复制数据库的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号