mysql 多实例备份
近几天接到一个任务,要把线上的几台数据库做个主从备份~
个人是个数据库 小白,平时也就是最多条件搜索一下这样,接到这个任务有点错愕,但是任务之所以是任务,因为,任务是必须要完成的!正好,也打算趁机学习一把数据库~
首先说一下面临的几个问题,再慢慢对应找解决方法:
1、一个主机上怎么管理多个mysql实例?
资源有限,只能用一台主机备份多个机器上的mysql,所以怎么才能在一台机器上运行多个mysql呢,肯定是要包括不同的端口,搜索一下mysql multi 可以配置管理多实例,
具体配置,还要等实验后再过来记录~
实验记录: a、修改/etc/my.cnf 分别配置[mysql_multi] [mysqldN] ###[mysqldN]的配置和普通的mysql配置一样,但是只需要server-id 与主机的server-id不同
b、初始化数据库 /usr/bin/mysql_install_db --datadir=/data/mysql/3319/data # datadir 在my.cnf里配置~每初始化一次,密码会保存
在/root/.mysql_secret文件里.
c、启动mysql_multi /usr/bin/mysqld_multi start 1-n;#GNR 是指mysqlN 中的N,N要为正整数~
d、登陆mysql 实例,mysql -uroot -p -S /var/lib/mysql/mysql3319.sock ###sock文件路径在配置文件里配置
注意:最好配置multi.log 方面观察日志
2、如何配置主从框架
这个是工作的核心,怎么配置才是实现主从~有待实验 首先贴出我的版本 5.7.4-m14
实验记录:
a、主机上必需配置三个配置,server-id =1
log-bin=PATH/log
binlog_format=mixed
b、主机上创建备份权限用户 grant replication slave,replication client on *.* to repl@'从库IP' identified by 'PASWORD'####安全起见,最好只准许从库登陆
flush privileges;
c、从库上的配置: server_id =2###只要不和主server-id的值一致即可
socket=/var/lib/mysql/mysql3319.sock ###为了方便区分,加上端口名
datadir=/data/mysql/3319/data ##路径自定,为了区分
注: 因为数据量较大,dump数据比较浪费时间,但是锁表影响业务,所以我是通过物理拷贝的数据,直接到datadir下面,除了server-id 和datadir不和主机一样,其他全部一样,也必须一样,否则,就会出现从库的IO线程启动失败~
3、如何进行首次同步
首先要明确的是,线上的业务是不能停的,这就意味着主数据库是不能停止的,那如何进行首次备份呢?这个是不可忽略的问题~待寻答案
实验记录: 我的主机在之前必须的配置都已经加上,所以没必要重启数据库了,这点让我觉得非常幸运,不用等到半夜重启服务啦!!
a、 上只读锁 ,:flush tables with read lock ;
b、记下偏移量: show master status;
c、 拷贝数据: 这里有两种选择,
(1) mysqldump 优缺点,配置文件不用完全一致,但是操作时间较长,需要初始化数据库
mysqldump -uroot -p --opt -R --all-databases|gzip -9 >/tmp/XX.sql.gz ##压缩一下,等会传输的时候节省时间,当然到从库那边还要先gunzip.
mysql -uroot -p <XX.sql
(2) 物理备份,操作时间短,除个别配置,其他配置要保持完全一致, 可以不用初始化数据库
主库datadir路径下的文件——》 从库datadir路径下即可
d 、解锁 unlock tables;
e、启动从库 mysql -u root -p -S /var/lib/mysql/mysql3319.sock 查看数据库是否全部导入
f、 配置主库: change master to master_host='主库ip',####配置主库的方式跟mysql 版本相关,较老版本可直接在配置文件中
->master_user='repl', ####配置主库
->master_password='PASSWORD',
->master_log_file='mysql-bin.XXXX'
->master_log_pos=XXXXXX;
g、启动从库服务 start slave 启动方式也和数据库版本相关,较老版本可能用slave start 启动
h、查看主从状态 show slave status\G; 这两个进行启动,说明主从配置成功了
4、高可用方案
备机运行多实例,那么就不能传统的在机器层面做高可用,要从实例层面做高可用~具体怎么操作,待寻答案
5、如何保证多实例的性能
据了解多实例的性能并不会随cpu的个数增加而增加,存在瓶颈,那我需要做的就是需要把实例绑定在不同的cpu上来提高性能。
初接触mysql主从,若有错误之处,欢迎多多指正