近几天接到一个任务,要把线上的几台数据库做个主从备份~

个人是个数据库 小白,平时也就是最多条件搜索一下这样,接到这个任务有点错愕,但是任务之所以是任务,因为,任务是必须要完成的!正好,也打算趁机学习一把数据库~

首先说一下面临的几个问题,再慢慢对应找解决方法:

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要为正整数~

、登陆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;    这两个进行启动,说明主从配置成功了

                   

60GB大小的MySQL如何快速备份_mysql

 

 

4、高可用方案

备机运行多实例,那么就不能传统的在机器层面做高可用,要从实例层面做高可用~具体怎么操作,待寻答案

5、如何保证多实例的性能

据了解多实例的性能并不会随cpu的个数增加而增加,存在瓶颈,那我需要做的就是需要把实例绑定在不同的cpu上来提高性能。

 

初接触mysql主从,若有错误之处,欢迎多多指正