数据库迁移杂谈(innobackupex mysql主备 mysql热备 mysql环境搭建)

 

1、mysql环境搭建
 

A、下载mysql对应RPM包:

cat /etc/redhat-release; // centos 7
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum install mysql57-community-release-el6-9.noarch.rpm
yum repolist all | grep mysql;查看安装包

;修改配置中的 enabled选项,安装mysql5.7,将mysql57-community中的enabled=0修改为enabled=1
vim /etc/yum.repos.d/mysql-community.repo; 

B、安装mysql:

yum install mysql-community-server

C、启动mysql:

service mysqld start(centos7以上版本已经不需要mysqld_safe来启动并监控mysql)

mysql启动后会创建一个超级用户帐号:
'root'@'localhost,并且会为帐号生成随机密码,随机密码存储在错误日志文件里面。

要显示它,使用以下命令:grep 'temporary password' /var/log/mysqld.log
在安装完成后应尽快使用刚才生成的随机密码登录mysql,然后修改超级用户帐号密码  

shell> mysql -uroot -p 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';// 密码难度:字母大小写、数字、特殊字符

2、mysql主从设置

A、整体上来说,复制有3个步骤:

(1)、master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)、slave将master的binary log events拷贝到它的中继日志(relay log);
(3)、slave重做中继日志中的事件,将改变反映它自己的数据。

主从

 

B、一台master,两台为slave:

    master:10.4.32.130 
    slave :10.4.32.132(下一代的master)
    slave :10.4.32.133

C、master配置:

    在mysql配置文件my.cnf的末尾加上:

    log-bin=mysql-bin #slave会基于此log-bin来做replication 
    server-id=1 #master的标示 
    sync_binlog=1

D、slave配置:

    在mysql配置文件my.cnf的末尾加上:

    server-id=2 #slave的标示 ,ip2int(10.4.32.132) 
    server-id=3 #slave的标示 ,ip2int(10.4.32.133)

E、在master中增加用于数据同步的账户:

    grant replication slave on . to 用户名@% identified by '密码'
    在master中查看Master status:
    show master status;

F、配置slave:

    stop slave; 
    change master to master_user='username',master_password='password',master_host='10.4.32.130',master_port=3306,master_log_file=’mysql-bin.000001’,master_log_pos=10000; 
    // 其中master_log_file,master_log_pos 从master status中查看
    start slave;

3、mysql迁移

A、数据拷贝:

    数据备份(由于我这是由于磁盘问题进行数据库迁移的,所以数据复制我选择的是远程复制)。
    innobackupex --defaults-file=/etc/my.cnf --user=username --password=password --socket=/tmp/mysql.sock --slave-info --use-memory=4G --stream=tar --safe-slave-backup /tmp/mysql |ssh root@目标IP cat ">" /root/backup.tar

    解压备份文件解压:tar -ixvf backup.tar -C backup/

    中途遇到的坑:
    源数据库中设置了binlog-do-db,导致部分数据库的操作没有完全写入binlog(进而导致迁移时丢失部分数据)。

B、数据准备:

    关闭数据库,service mysqld stop(我使用的是centos7,命令行工具已经包含有mysql_safe的功能)。
    清空之前数据库的数据文件:即my.cnf下的datadir对应的文件夹下的内容清空。
    innobackupex --defaults-file=/etc/my.cnf --user=username --password=password --apply-log backup/

C、数据恢复:

    innobackupex --defaults-file=/etc/my.cnf --user=username --password=password --copy-back  backup/
    修改数据权限:chown -R mysql.mysql 数据文件

D、启动数据库:

    service mysqld start
    遇到的问题:
    由于我是由低版本往高版本升级,需要对新的数据库做update操作:mysql_upgrade -uusername -ppassword
    更新完成后,需要对数据进行restart,否则远程客户端连接会有问题。

E、添加主从,同步数据迁移后更新的数据:

1、查看数据拷贝时的文件pos:(如果库中只使用了innodb引擎,恢复的时候使用xtrabackup_binlog_pos_innodb文件确定pos信息;如果还有其他引擎(如MyISAM),恢复的时候使用xtrabackup_binlog_info确定pos信息)。

2、关闭当前机器的slave服务:
    stop slave;

3、设置新的从节数据库的文件更新pos:
    master_user='slaveruser',master_password='slavePassword!',master_host='源数据库IP',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154;
    注意在此之前你必须先在源数据库中添加slaver账户。

4、启动从服务:
    start slave;

5、观察数据同步进度并最终确认是否完全迁移。
    show slave status;

 

 

参考资料:

  1. http://www.cnblogs.com/yinliang/p/6099058.html
  2. http://blog.csdn.net/jiaoshenmo/article/details/51181773/
  3. https://highdb.com/innobackupex-restore/
 

 

posted @ 2017-08-30 15:28  高兴的翅膀  阅读(376)  评论(0编辑  收藏  举报