mysql数据库重新做主从(完全同步)

1、先进入主库进行锁表,注意窗口不要关闭

mysql> flush table with read lock;

2、把数据进行备份

> mysqldump -uroot -p --opt -R 数据库 > /data/bakdb.sql

3、再新开个窗口,查看主数据库信息

mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000001 | 1112 | | | |

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

4、在从库上停止slave

mysql> stop slave;

5、导入备份的数据文件

mysql> source /data/bak.sql

6、重置同步

mysql> reset slave;

7、重新设置同步节点

mysql> CHANGE MASTER TO

MASTER_HOST='192.168.1.1',

MASTER_PORT=3306,

MASTER_USER='mysync',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=1112;

host,port,user,password请根据你的主库设置相应修改,log_file和log_pos根据主库中master status相应修改。

8、开启slave

mysql> start slave;

9、查看slave状态

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

10、对主数据库解锁

mysql> unlock tables;

11、再次在主库中添加或修改数据,看从库数据是否同步。

### 配置 MySQL 数据库主备复制 #### 1. 准备工作 在配置 MySQL 的主备复制之前,需要确保主服务器和从服务器都已正确安装并运行。以下是必要的准备工作: - **版本一致性**:确认主服务器和从服务器的 MySQL 版本一致[^1]。 - **唯一 server_id**:为主服务器和从服务器分配唯一的 `server_id` 值。可以通过修改 MySQL 配置文件(通常是 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`),添加如下内容: ```ini [mysqld] server-id=1 # 对于主服务器设置为1 log-bin=mysql-bin # 开启二进制日志功能 ``` 对于从服务器,则需将其 `server_id` 设置为其他值,例如 `2`。 #### 2. 创建复制账户 为了使从服务器能够连接到主服务器获取更新记录,在主服务器上创建一个用于复制操作的专用用户账号。执行以下 SQL 语句完成此过程: ```sql CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Password@2024'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 以上命令会创建名为 `repl` 的用户,并赋予其所需的权限以便进行数据同步[^1]。 #### 3. 获取主服务器状态信息 登录至主服务器上的 MySQL 客户端界面,输入下列指令来查看当前二进制日志的位置以及文件名: ```sql SHOW MASTER STATUS; ``` 这一步骤非常要,因为稍后当我们在从服务器启动复制进程的时候需要用到这些参数。 #### 4. 配置从服务器 接着转到从服务器环境里相应的调整。同样编辑该机器中的 MySQL 配置文档加入下面几项设定: ```ini [mysqld] server-id=2 # 设定不同于主服务端ID号 relay-log=slave-relay-bin log-slave-updates=true read-only=true # 可选项目,建议开启只读模式防止意外写入破坏数据一致性. ``` MySQL 服务让更改生效之后再次进入 CLI 工具下发出变更通知给 Slave Node: ```sql CHANGE MASTER TO MASTER_HOST='<Master_IP>', -- 替换为实际IP地址或者域名解析后的数值形式表示法 MASTER_USER='repl', -- 刚才建立好的用户名字串 MASTER_PASSWORD='Password@2024', -- 用户密码字符串表达方式呈现出来即可满足需求标准条件下的情况分析讨论环节当中涉及到的内容部分展示效果更佳一些吧? MASTER_LOG_FILE='<BinLogFile>', -- 来源于先前查询所得结果集里面的File字段对应的名称描述文字表述清楚一点比较好哦~ MASTER_LOG_POS=<Position>; -- 同样也是依据前面所获得的数据位置点数填写进去就可以了呀! START SLAVE; -- 正式激活Slave角色身份定义关系链路构建成功与否取决于这里是否能正常运转起来呢?😊 ``` 最后验证一下整个架构体系能否稳定运作无误的话就可以放心大胆地投入使用啦! --- ### 注意事项 - 如果网络延迟较高可能会影响性能表现,请考虑优化网络质量或采用压缩传输选项减少带宽消耗量级提升效率水平达到预期目标范围之内才行哟~ 😊 - 当遇到任何异常状况发生时记得及时查阅错误日记寻找解决办法尽快恢复正常运营秩序维护业务连续性和用户体验满意度不受影响才是最要的事情之一啊朋友们!!!💪 --- ```python # 示例 Python 脚本监控主从同步状态 (可选扩展功能开发方向参考用途) import pymysql def check_replication_status(host, port, user, password): try: connection = pymysql.connect( host=host, port=int(port), user=user, passwd=password) cursor = connection.cursor() query = """ SELECT Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master FROM INFORMATION_SCHEMA.PROCESSLIST WHERE Command LIKE '%binlog%'; """ cursor.execute(query) result = cursor.fetchone() io_running = result[0].lower() == "yes" sql_running = result[1].lower() == "yes" lag_seconds = int(result[2]) if isinstance(result[2], str) and result[2].isdigit() else None return { "io_running": io_running, "sql_running": sql_running, "lag_seconds": lag_seconds } except Exception as e: raise ValueError(f"Error checking replication status: {e}") if __name__ == "__main__": status = check_replication_status('localhost', 3306, 'root', '') print(status) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值