mysql数据库镜像

1. 说明

  mysql 数据库镜像是将主数据库内容镜像备份到从数据库,当出现主数据库错误可以及时用从数据库顶替或者从从数据库回复数据的一种方式。

2. 配置

  配置主从镜像,需要分别配置主数据库和从数据库的配置文件,然后重启数据库才能生效。

2.1 主数据库配置

2.1.1 数据库配置

停数据库

#mysql.server stop
 

数据库配置文件,通常为 /etc/my.cnf

#vi /etc/my.cnf
 

找到 server-id 配置项,一般在 [mysqld] 配置下

增加:

server-id=1

log-bin=/var/db/mysql/master.log //BIN日志路径

#binlog-do-db=要同步的数据库名称  //不写就同步全部。如果备份多个数据库,重复设置这个选项即可

#binlog-ignore-db = mysql //忽略的数据库,如果不备份多个数据库,重复设置这个选项即可

 启动数据库

#mysql.server start

mysql> show master status;//查看主服务器状态
 

2.1.2 创建从数据库用户

在主服务器上创建从服务器同步数据要的帐号,如果多台,建议统一帐号便于管理。

一般创建帐号命令如下:

grant replication slave,reload,super,select on *.* to "用户名"@"从数据库地址" identified by "密码"
 

其中红色部分为帐号权限,蓝色部分为需要自行定制的帐号密码已经从数据库服务器 IP 地址

这一步也可以通过 phpadmin 进行配置

2.2 从数据库配置

停数据库

#mysql.server stop
 

#vi /etc/my.cnf

找到 server-id 配置项,一般在 [mysqld] 配置下

增加:

server-id=2

master-host=主数据库服务器地址

master-user=连接主服务器的帐号

master-password=连接主服务器的密码

master-port=3306

master-connect-retry=60

#replicate-do-db=要同步的数据库 //如果备份多个数据库,重复设置这个选项即可

#replicate-ignore-db=不同步的数据库 //如果不备份多个数据库,重复设置这个选项即可

 启动数据库:

#mysql.server start

mysql> show slave status G; //查看从数据库状态
 

3. 数据镜像

3.1 rsync 同步数据

将主数据库目录下数据库文件拷贝到从数据库目录下,可以通过 rsync 或者通过 scp 等方式拷贝,这里建议使用 rsync 同步

配置主数据库服务器 rsync

#apt-get install rsync

 编辑配置文件

#vi /etc/rsyncd.conf

 将下面内容加入进去配置好:

uid = root

gid = root

use chroot = no

max connections = 50

syslog facility = local5

pid file = /var/run/rsyncd.pid

log file = /var/log/rsyncd.log

 

[访问的名称]

        path = 要同步的数据库目录路径

        comment = 说明

        hosts allow =  允许的访问地址
 

配置从数据库 rsync

#apt-get install rsync
 

同步数据:

登陆主服务器锁库:

mysql> FLUSH TABLES WITH READ LOCK;
 
#rsync –av 主服务器地址 :: 访问的名称   从服务器数据库目录

 

例如:

#rsync –av 202.205.109.1::db3  /home/mysql/db3/
 

完成后解锁:

登陆主数据库解锁:

mysql>UNLOCK TABLES;
 

3.2 数据库命令同步数据

当配置好主和从数据库后,先主数据库服务器表:

登陆主服务器锁库:

mysql> FLUSH TABLES WITH READ LOCK;

 登陆从数据库运行:

mysql>load data from master;
 

这个过程很慢,根据数据库大小不同,镜像时间不同,不建议使用,完成后解锁

登陆主数据库解锁:

mysql>UNLOCK TABLES;
 

4. 测试

在主库新建一个表或者创建个数据库,到从库查看,并查看下日志和运行状况等,如果没有问题表示成功

 

mysql建立镜像数据库- - Tag: mysql建立镜像数据库 环境介绍:主库 192.168.0.205 从库 192.168.0.206 mysql版本:4.1.13a 1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加 server-id=1 log-bin=binlog_name 2、主库增加用户,用于从库读取主库日志。 grant replication slave,reload,super on *.* to 'slave'@'192.168.0.206' identified by '123456' 3、从库连接主库进行测试。 /opt/mysql/bin/mysql -u slave -p -h 192.168.0.205 4、停从库,修改从库/etc/my.cnf,增加选项: [mysqld] server-id=2 master-host=192.168.0.205 master-user=slave master-password=123456 5、启动从库,可以进行主从库数据同步 /opt/mysql/share/mysql/mysql start /opt/mysql/bin/mysql -u root -p mysql>load data from master; 说明:这一步不这么做也可以,用数据库倒入或者直接目录考过来也行。 6、进行测试: 主库创建表, mysql>create database sampdb; mysql>create table new (name char(20),phone char(20)); mysql>insert into new ('lhj','60549391'); 打开从库,察看: /opt/mysql/bin/mysql -u root -p mysql>show database; mysql sampdb test mysql>use sampdb; mysql>show tables; new 说明主从数据库创建成功。 7、主从数据库相关命令: slave stop; slave start ; 开始停止从数据库。 show slave status\G; 显示从库正读取哪一个主数据库二进制日志 purge master logs to 'binlog.000004';C此命令非常小心,删除主数据库没用的二进制日志文件。如果误删除,那么从库就没有办法自动更新了。 change master; 从服务器上修改参数使用。 如果数据库表是myisam类型,并且权限够 grant replication slave,reload,super on *.* to 'slave_user'@'host' identified by 'slave_pass' 也可以用load data from master命令,建立从数据库
要实现 MySQL 数据库镜像容灾,可考虑以下几种方法: ### 基于二进制日志(Binlog)的主从复制 主从复制是 MySQL 中常用的容灾方法。在主服务器上开启二进制日志(Binlog),记录所有对数据库的更改操作,从服务器通过读取主服务器的 Binlog 并在本地重放这些操作,从而实现数据的同步。 配置步骤如下: 1. **主服务器配置**:在主服务器的配置文件(如`my.cnf`)中添加以下配置: ```ini server-id=1 log-bin=/var/log/mysql/mysql-bin.log binlog-do-db=your_database_name ``` `server-id`用于唯一标识主从服务器中的每个实例;`log-bin`指定 Binlog 文件的路径;`binlog-do-db`指定需要同步的数据库名称,如果要同步多个数据库,可重复设置该选项。 2. **从服务器配置**:在从服务器的配置文件中添加: ```ini server-id=2 ``` 3. **创建复制用户**:在主服务器上创建一个用于复制的用户,并授予相应的权限: ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; ``` 4. **获取主服务器状态**:在主服务器上执行`SHOW MASTER STATUS;`命令,记录`File`和`Position`的值。 5. **配置从服务器**:在从服务器上执行以下命令,配置复制信息: ```sql CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxxxxx; ``` 其中,`MASTER_HOST`为主服务器的 IP 地址;`MASTER_LOG_FILE`和`MASTER_LOG_POS`为步骤 4 中记录的值。 6. **启动从服务器复制**:在从服务器上执行`START SLAVE;`命令启动复制,并使用`SHOW SLAVE STATUS\G`命令检查复制状态。 ### 基于 GTID(全局事务标识符)的主从复制 GTID 是 MySQL 5.6 及以上版本引入的一种全局唯一的事务标识符,使用 GTID 可以更方便地管理主从复制,避免手动指定 Binlog 文件和位置。 配置步骤如下: 1. **主从服务器配置**:在主从服务器的配置文件中添加以下配置: ```ini gtid_mode=ON enforce_gtid_consistency=ON ``` 2. **创建复制用户和配置复制信息**:与基于 Binlog 的主从复制类似,但在配置从服务器时,无需指定`MASTER_LOG_FILE`和`MASTER_LOG_POS`。 ```sql CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1; ``` 3. **启动从服务器复制**:执行`START SLAVE;`命令启动复制。 ### 多主复制 多主复制允许在多个 MySQL 服务器上同时进行写操作,每个服务器都可以作为主服务器和从服务器。这种方法可以提高系统的可用性和写性能,但配置和管理相对复杂。 配置步骤如下: 1. **所有服务器配置**:在所有服务器的配置文件中添加以下配置: ```ini server-id=unique_id log-bin=/var/log/mysql/mysql-bin.log binlog-do-db=your_database_name gtid_mode=ON enforce_gtid_consistency=ON ``` 2. **创建复制用户和配置复制信息**:在每个服务器上创建复制用户,并配置与其他服务器的复制关系。 3. **启动复制**:在每个服务器上启动复制。 ### 数据库备份与恢复 定期对 MySQL 数据库进行备份是容灾的重要手段。可以使用`mysqldump`命令进行逻辑备份,或者使用物理备份工具如`Percona XtraBackup`进行物理备份。 1. **逻辑备份**:使用`mysqldump`命令备份数据库: ```bash mysqldump -u root -p your_database_name > backup.sql ``` 2. **物理备份**:使用`Percona XtraBackup`进行物理备份: ```bash xtrabackup --backup --target-dir=/backup/dir ``` 在发生灾难时,可以使用备份文件进行恢复操作。 ### 基于 Docker 的容灾方案 如果使用 Docker 部署 MySQL 数据库,可以通过 Docker 容器的管理和编排工具实现容灾。例如,使用 Docker Compose 或 Kubernetes 来管理 MySQL 容器的部署和副本。 1. **Docker Compose 示例**:创建一个`docker-compose.yml`文件,配置 MySQL 服务和副本: ```yaml version: '3' services: mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: password ports: - "3306:3306" volumes: - ./mysql-data:/var/lib/mysql deploy: replicas: 2 ``` 2. **Kubernetes 示例**:创建一个 MySQL 的 Deployment 和 Service: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: replicas: 2 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:latest env: - name: MYSQL_ROOT_PASSWORD value: password ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql-pvc --- apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 type: ClusterIP ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值