MySQL新增从库

项目背景描述:

在项目的开始只有一个MySQL实例在运行,后期因为安全性,压力,备份等原因需要在此实例的基础上面新增一个从库。

分析:

MySQL主从是基于binlog日志来实现的,那么需要主服务器开启binlog,此选项默认是关闭。我这边服务器在部署的时候就开启了,因为使用binlog可以用来恢复MySQL数据,并且还为以后做主从做好准备,所以我们推荐大家在部署主服务器的时候就开启此选项。另外在做主从的时候还需要主库和从库的server-id唯一,server-id在做主从的时候也是相当关键的一荐参数。

另外因为我们MySQL主库已经运行一段时间了,里面已经有相当多数据,我们需要将这些数据备份出来,然后从库再从备份的节点同步数据,这样来保持主从的数据一致性,并且在操作过程中最好不要影响我们的业务正常运行。最终决定使用xtrabackup来备份数据,因为用xtrabackup备份数据的时候不需要琐表,但只限于InnoDB引擎的数据库和XtraDB引擎的数据库,对于MyISAM引擎的数据库还是会琐表,刚好我们的数据库引擎使用的是InnoDB

操作步骤:

第一步:部署从数据库服务器,最好数据库版本一致,部署过程省略

第二步:修改配置文件

# 以下为主服务器需要修改的配置,server_id不一定为82,可以为任何一个数字,比如我们可以用本机的IP最后一位
log_bin = mysql-bin
datadir=/data/mysql               #此选项一定要指定,就算有默认也需要指定
server_id = 82

# 以下为可选项
binlog-ignore-db =mysql,test           #指定忽略不同步的数据库
binlog-do-db=discuz,phpcms           #指定要同步的数据库

在主服务器上面授权从服务器一个主从同步账号

mysql> grant replication slave on *.* to 'username'@'hostip' identified by 'password'
# 以下为从服务器需要修改的配置
datadir=/data/mysql                  #此选项一定要指定,就算有默认也需要指定
server_id = 2

# 以下为可选项
replicate-do-db                    #指定需要同步的数据库
replicate-ignore-db                  #指定不同步的数据库
replicate-do-table                   #指定需要同步的表
replicate-ignore-table                  #指定不同步的表
replicate-wild-do-table                  #指定需要同步的表,可以使用通配符,如test.tables1*
replicate-wild-ignore-table                  #指定不需要同步的表,可以使用通配符

第三步:安装xtrabackup工具

新增yum源

cat >> /etc/yum.repos.d/xtrabackup.repo << EOF
[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 0
EOF

注意:执行完上面命令后注意对比下文件,有可能$releaserver $basearch需要手工添加

安装xtrabackup

yum -y install percona-xtrabackup

第四步:备份数据

注意:以需要使用root用户执行,或者使用sudo权限执行

备份整个库

xtrabackup --user=root --password=root --target-dir=/opt/backups --backup

--user             指定数据库访问用户名

--password    指定数据库访问密码,如果密码有特殊字符需要使用单引号引起来

--target-dir    指定备份路径,最好写绝对路径

--backup        与--target-dir选项一起使用

备份单个库

xtrabackup --user=root --password=root --databases=app_test --target-dir=/opt/backups --backup

--databases    指定需要备份的库名

备份多个库

xtrabackup --user=root --password=root --databases="app_test webservice" --target-dir=/opt/backups --backup

--databases    多库用双引号引起来,使用空格进行分隔

备份某个库的指定表

xtrabackup --user=root --password=root --databases="nirvana.user_info nirvana.card_info" --target-dir=/opt/backups --backup

--databases    备份表使用库名.表名的方式,如果是多个表就使用双引号引起来,不同表使用空格分隔

第五步:将备份数据复制到从服务器

scp -pr /opt/backups [email protected]:/path/to

第六步:将数据还原到从服务器

还原之前需要清空从服务器数据目录,如果有需要的数据就先备份到其实地方

整个库还原

还原单个库

还原多个库

还原某张表

执行以下命令

xtrabackup --copy-back --target-dir=/path/to

第七步:启用主从

执行以下命令

mysql> change master to master_host='192.168.1.71',master_port=3306,master_user='test',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;

master_host:

master_port:

master_user:

master_password:

master_log_file:

master_log_pos:

执行以下命令启用主从同步

mysql> start slave;

小知识:停止主从同步命令为

mysql> stop slave;

第七步:测试并检查主从状态

mysql> show slave status \G;

如果看以以下两个值为Yes说明主从同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

第八步:测试

可以修改下需要同步的库,或者表的数据看上是否能正常同步去,或者在备份完的时候就去修改下数据,这时候备份里同是没有此修改记录,当启用主从同步的时候看下数据是否会同步过来

原文地址:http://blog.51cto.com/270142877/2096818

时间: 2024-10-30 14:52:51

MySQL新增从库的相关文章

MySQL利用xtrabackup在线修复或新增从库

如果数据库的数据量很大,表大小有几十个G,利用mysqldump导出备份会消耗非常长的时间,会对数据库产生不稳定风险,这时可以利用xtrabackup工具在线复制主库文件,利用复制出来的主库文件可以修复从库故障或新增从库实例 主库IP:192.168.1.1从库IP:192.168.1.2 主库和从库服务器都需要安装以下环境安装必须的依赖环境yum install libssl.so.6 -yln -sf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.

mysql二:库操作

一 初识SQL语言 SQL(Structured Query Language 即结构化查询语言)SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为3种类型:DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTERDML语句 数据库操纵语言: 插入数据INSERT.删除数据DELETE.更新数据UPDATE.查询数据SELECTDCL语句 数据库控制语言: 例如控制用户的访问权限GRANT.RE

PHP获取MySql新增记录ID值的方法

今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法有 1.使用语句 mysql_query("select max(id) from user",$link); 2.使用函数msyql_insert_id(); (1)mysql版 int mysql_insert_id ([ resource $link_identifier = NUL

PHP获取MySql新增记录ID值的3种方法

From: http://www.jb51.net/article/51473.htm 这篇文章主要介绍了PHP获取MySql新增记录ID值的3种方法,一般使用PHP自带函数mysql_insert_id() 即可实现,另2种方法权作特殊情况下使用,需要的朋友可以参考下 一.使用语句: 复制代码 代码如下: mysql_query("select max(id) from t1",$link); 使用此方法得到的是 id最大的值,确为最后一个值,但当多链接线程时,这个最大的id并不一定

mysql 中drop 库的问题

最近drop database pai; 报错 ERROR 1010 (HY000): Error dropping database (can't rmdir './pai', errno: 39) 我就想把库文件直接删除试试,于是 rm -rf /usr/local/mysql/data/pai 然后我又show databases; 结果还有pai库 于是drop database pai; ERROR 1010 (HY000): Error dropping database (can'

MySQL用户、库、表的操作语法 关于用户的语法

MySQL用户.库.表的操作语法 关于用户的语法 查看当前系统里的用户: select user,host from mysql.user; 查看当前登陆的用户 select user(); 创建用户 语法:create user '用户'@'主机' identified by '密码'; 示例:create user 'anuo'@'localhost' identified by '123' 创建用户并授权 grant 权限 on 库.表 to '用户名'@'主机域' identified

mysql数据跨库传输

代码如下:仅供参考 #!/bin/bash # run on every hour between 00:00 and 23:00. set -o errexit # 这个文件是我设置的数据源,包含了我使用变量引用的数据源,省略prod_dbs.sh文件 source /opt/soft/ods/script/odl/prod_dbs.sh #source https://blog.csdn.net/zhaojike/article/details/prod_dbs.sh MYSQL=`whic

mysql语法建库建表综合整理事例

首先介绍一个数据库常用编码格式区别: mysql数据库编码格式utf8_general_ci.utf8_bin.utf8_general_cs区别: utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写.(bin -> binary二进制的意思) utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感. utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感. 简介cmd中使用数据库常用语法

mysql恢复单库、单表

从全备份中,还原某一个库(假如要还原的库叫做hellodb)内容: # mysqldump -uroot -proot --all-databases --master-data=2 > all.sql # mysql -uroot -proot -e 'create database hellodb;'  还原之前,首先要确保这个库的已经存在了,不然下面的命令会提示失败] # mysql -uroot -proot hellodb --one-database < all.sql   # -