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;
参考资料: