设为首页 收藏本站
查看: 905|回复: 0

[经验分享] MySQL新增从库

[复制链接]

尚未签到

发表于 2018-9-28 09:56:07 | 显示全部楼层 |阅读模式
  项目背景描述:
  在项目的开始只有一个MySQL实例在运行,后期因为安全性,压力,备份等原因需要在此实例的基础上面新增一个从库。
  分析:
  MySQL主从是基于binlog日志来实现的,那么需要主服务器开启binlog,此选项默认是关闭。我这边服务器在部署的时候就开启了,因为使用binlog可以用来恢复MySQL数据,并且还为以后做主从做好准备,所以我们推荐大家在部署主服务器的时候就开启此选项。另外在做主从的时候还需要主库和从库的server-id唯一,server-id在做主从的时候也是相当关键的一荐参数。
  另外因为我们MySQL主库已经运行一段时间了,里面已经有相当多数据,我们需要将这些数据备份出来,然后从库再从备份的节点同步数据,这样来保持主从的数据一致性,并且在操作过程中最好不要影响我们的业务正常运行。最终决定使用xtrabackup来备份数据,因为用xtrabackup备份数据的时候不需要琐表,但只限于InnoDB引擎的数据库和XtraDB引擎的数据库,对于MyISAM引擎的数据库还是会琐表,刚好我们的数据库引擎使用的是InnoDB
  操作步骤:
  第一步:部署从数据库服务器,最好数据库版本一致,部署过程省略
  第二步:修改配置文件
# 以下为主服务器需要修改的配置,server_id不一定为82,可以为任何一个数字,比如我们可以用本机的IP最后一位  
[mysqld]
  
datadir=/data/mysql       #此选项一定要指定,就算有默认也需要指定
  
log_bin=mysql-bin
  
server_id=10
  
expire_logs_days=5        #指定binlog文件保留的天数,如果硬盘空间够大可以不指定,或者指定天数多一点
  

  
# 以下为可选项
  
binlog-ignore-db=mysql,information_schema,performance_schema,sys    #指定忽略不同步的数据库
  
binlog-do-db=discuz,phpcms                                          #指定要同步的数据库
  在主服务器上面授权从服务器一个主从同步账号
mysql> grant replication slave on *.* to 'slave'@'%' identified by '123qweASD';  说明:以上授权命令根据自己需求更改,比如权限,可访问数据库,用户名,授权客户端,密码等信息
# 以下为从服务器需要修改的配置  
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              #指定不需要同步的表,可以使用通配符
  
# 优化同步延迟,根据项目设置
  
slave_parallel_workers = 16     #多少个线程用于主从复制
  
slave_parallel_type= logical_clock
  第三步:安装xtrabackup工具(主从服务器都需要安装)
  至以下连接下载适合自己操作系统版本和MySQL版本的xtrabackup
  xtrabackup下载
  下载完成后执行以下命令安装
# 这样可以自动安装所需要依赖包  
yum -y install percona-xtrabackup-24-2.4.10-1.el7.x86_64.rpm
  第四步:备份数据
  注意:以需要使用root用户执行,或者使用sudo权限执行
  备份整个库
xtrabackup --user=root --password=123456 --target-dir=/root/mysql_bak -S /tmp/mysql.sock --backup  --user             指定数据库访问用户名
  --password    指定数据库访问密码,如果密码有特殊字符需要使用单引号引起来
  --target-dir    指定备份路径,最好写绝对路径
  --backup        与--target-dir选项一起使用
  -S                   指定mysql.sock文件位置
  备份单个库
xtrabackup --user=root --password=123456 --databases=test1 --target-dir=/root/mysql_bak -S /tmp/mysql.sock --backup  --databases    指定需要备份的库名
  备份多个库
xtrabackup --user=root --password=123456 --databases="test1 test2 test3" --target-dir=/root/mysql_bak -S /tmp/mysql.sock --backup  --databases    多库用双引号引起来,使用空格进行分隔
  备份某个库的指定表
xtrabackup --user=root --password=123456 --databases="test1.tables1 test2.tables2 test3.tables3" --target-dir=/root/mysql_bak -S /tmp/mysql.sock --backup  --databases    备份表使用库名.表名的方式,如果是多个表就使用双引号引起来,不同表使用空格分隔
  第五步:将备份数据复制到从服务器
scp -pr /root/mysql_bak/* root@172.16.10.11:/data/mysql_slave  第六步:将数据还原到从服务器
  注意:还原之前需要停止从库数据库服务并清空从服务器数据目录,如果有需要的数据就先备份到其实地方
# 停止服务  
service mysqld restart || systemctl restart mysqld
# 备份原数据  
mkdir /data/mysql_bak
  
mv /data/mysql/* /data/mysql_bak
  还原操作
xtrabackup --prepare --target-dir=/data/mysql_slave  
xtrabackup --copy-back --target-dir=/data/mysql_slave
  第七步:启动数据库并启用主从
# 将原备份数据复制回原目录,注意:ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1四个文件不要覆盖  
# 如果从库没有数据需要往回复制的话就不需要cp这步操作
  
cp -r /data/mysql_bak/* /data/mysql
  
chown -R mysql:mysql /data/mysql
  
service mysqld restart || systemctl restart mysqld
  执行以下命令
mysql> change master to master_host='172.16.10.10',master_port=3306,master_user='slave',master_password='123qweASD',master_log_file='mysql-bin.000011',master_log_pos=154;  master_host:             master服务器的IP地址
  master_port:             master服务器的端口
  master_user:             master服务器授权从服务器主从同步的用户名
  master_password:    master服务器授权从服务器主从同步的密码
  master_log_file:        从主服务器备份出来的文件:xtrabackup_info中获取
grep "binlog_pos" xtrabackup_info | awk -F "'" '{print $2}'  master_log_pos:       从主服务器备份出来的文件:xtrabackup_info中获取
grep "binlog_pos" xtrabackup_info | awk -F "'" '{print $4}'  执行以下命令启用主从同步
mysql> start slave;  小知识:停止主从同步命令为
# 以下为扩展知识命令,如果执行后需要再执行上条命令start slave;  
mysql> stop slave;
  第八步:测试并检查主从状态
mysql> show slave status \G;  如果看以以下两个值为Yes说明主从同步正常
Slave_IO_Running: Yes  
Slave_SQL_Running: Yes
  第九步:测试
  可以修改下需要同步的库,或者表的数据看上是否能正常同步去,或者在备份完的时候就去修改下数据,这时候备份里同是没有此修改记录,当启用主从同步的时候看下数据是否会同步过来



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603114-1-1.html 上篇帖子: MHA+MySQL实现mysql高可用 下篇帖子: MySQL的视图
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表