ubuntu mysql 主从复制

本文详细介绍了如何在MySQL中配置主从复制,包括主服务器和从服务器的配置步骤,授权从机权限,刷新权限,查看主状态,以及解决复制过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.主服务开启log_bin

# vim /etc/mysql/my.cnf
....
server-id               = 55
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
...

修改完mysql配置后重启mysql

# service mysql restart

授权从机权限

mysql > grant replication slave on *.* to slave@120.78.62.47 identified by "123456";

刷新权限

mysql> flush privileges;

查看主状态

mysql> show master status
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |     2821 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
重启mysql#
    #service mysql restart

2.从机

开启备份

# vim /etc/mysql/my.cnf

 

server-id               = 33
log_bin                 = /var/log/mysql/mysql-bin.log

重启mysql

# service mysql restart

 

mysql> change master to 
     master_host='47.52.100.111',
     master_user='slave',
     master_log_file='mysql-bin.000012',
     master_password='123456',
     master_log_pos=106028;

 

如果报错

ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

请删除文件:

/var/lib/mysql/master.info
/var/lib/mysql/relay-log.info

开启主从备份并查看

mysql > start slave
mysql > show slave status\G;
 
....
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...

表示成功

复制数据库

由于备份数据并没有初始起来,原因也查了很多,没有解决,想到了个折中的办法:复制数据库,

mysqldump bshop-test -uroot -p123456 --add-drop-table | mysql bshop -uroot -p23456

bshop-test为被复制对象,然后再复制回来,达到数据初始数据一致

mysqldump bshop -uroot -p123456 --add-drop-table | mysql bshop-test -uroot -p123456

 

转载于:https://my.oschina.net/oslph/blog/2873390

### UbuntuMySQL 主从同步接管配置及故障处理 #### 配置主从同步的基础环境 在 Ubuntu 环境下,MySQL 的主从同步依赖于服务器之间的数据传输机制。为了实现这一目标,需完成以下几个关键步骤: 1. **安装 MySQL 并初始化** 使用 `apt` 安装 MySQL 服务并执行安全初始化命令: ```bash sudo apt update && sudo apt install -y mysql-server sudo mysql_secure_installation ``` 这一步骤确保了基础环境的稳定性和安全性[^1]。 2. **修改 MySQL 配置文件** 编辑 `/etc/mysql/mysql.conf.d/mysqld.cnf` 文件,注释掉绑定地址部分以支持远程连接: ```ini bind-address = 0.0.0.0 ``` 同时,在 `[mysqld]` 节点下添加或确认以下参数是否存在: ```ini server-id=1 # 主库 ID 设置为唯一值 log-bin=mysql-bin # 开启二进制日志功能 binlog-do-db=test_db # 可选,指定需要同步的数据库名 ``` 3. **创建用于同步的账户** 登录到 MySQL 控制台,为主从同步创建专用用户: ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; ``` 4. **锁定主库表结构并导出初始数据** 锁定主库的数据防止变动,并备份当前状态以便后续导入至从库: ```sql FLUSH TABLES WITH READ LOCK; -- 加锁 SHOW MASTER STATUS; -- 记录 File 和 Position 参数 UNLOCK TABLES; -- 解锁 ``` 将主库中的数据通过工具如 `mysqldump` 导出: ```bash mysqldump -u root -p --all-databases --master-data > dump.sql ``` #### 实现主从同步的具体操作 将上述生成的 SQL 文件导入到从库中,并调整其配置如下所示: 1. 修改从库的 `server-id` 值(例如设为 `2`),同样开启二进制日志记录。 2. 执行变更主命令来关联两者的通信关系: ```sql CHANGE MASTER TO MASTER_HOST='主库 IP 地址', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='File 名字', -- 来自 SHOW MASTER STATUS 结果 MASTER_LOG_POS=Position 数值; -- 来自 SHOW MASTER STATUS 结果 START SLAVE; ``` 3. 检查同步状态是否正常运行: ```sql SHOW SLAVE STATUS\G ``` #### 故障排查指南 当遇到主从同步失败的情况时,可以按照以下方式定位问题所在: - 如果发现 Slave_IO_Running 或者 Slave_SQL_Running 字段显示 No,则说明存在错误; - 查看 Last_Error 提供的信息尝试解决冲突或者修复损坏项; - 对比两端的时间戳差异以及网络连通状况; 此外需要注意的是,版本兼容性也是重要因素之一——通常建议保持一致或者让主节点低于子节点版本号][^[^34]。 ```python def check_mysql_replication_status(): import pymysql connection = pymysql.connect( host="localhost", user="root", password="your_password" ) try: with connection.cursor() as cursor: sql_query = "SHOW SLAVE STATUS;" cursor.execute(sql_query) result = cursor.fetchone() io_running = result['Slave_IO_Running'] sql_running = result['Slave_SQL_Running'] last_error = result.get('Last_Errno') or None return { "io_running": io_running, "sql_running": sql_running, "last_error": last_error } finally: connection.close() status_info = check_mysql_replication_status() print(f"IO Running: {status_info['io_running']}, " f"SQL Running: {status_info['sql_running']}, " f"Error Code: {status_info['last_error']}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值