Mysql数据库实现主从备份
为测试主从备份效果使用CentOS7系统镜像的VM直接安装mysql以下为实操记录
CentOS7 VM使用:https://www.jianshu.com/p/cecf6cc04f46
一、安装mysql数据库
参考:https://www.jianshu.com/p/276d59cbc529
1.创建mysql用户和用户组
groupadd mysql #添加用户组
useradd -r -g mysql mysql #添加用户
2.下载安装包
cd /data
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
3.解压安装包
tar -tzvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql #修改文件名
mkdir /data/mysql/data #创建data目录
4.修改安装目录所属用户组及权限
chown -R mysql:mysql /data/mysql
chmod -R 755 /data/mysql
5.安装并初始化
cd /data/mysql/bin
./mysqld --initialize --user=mysql --datadir=/data/mysql/data --basedir=/data/mysql
错误提示:
./mysqld: error while loading shared libraries:libaio.so.l:connot poen shared object file:No such file or directory
解决方案:
yum install libaio-devel.x86_64 #缺少必要的数据库依赖,安装一下
[Tip]注意初始化日志结尾的随机初始密码 首次登陆需要用到 忘了也没事在下一步配置文件中添加skip-grant-tables 可以跳过密码验证(别问我怎么知道的-_-)
6.修改mysql配置文件
vi /etc/my.cnf
原有内容不知道干啥用的我全删了,替换成新的保存
[mysqld]
datadir=/data/mysql/data
basedir=/data/mysql
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
7.启动
ln -s /data/mysql/support-files/mysql.server /etc/init.d/mysql #添加软连接
service mysql start
ps -ef|grep mysql #不出意外应该显示mysql进程了
mysql>mysql -uroot #登录mysql 如果添加了跳过验证就不需要输入密码了 不然加上(-p上述的初始密码)
mysql>use mysql; #选择mysql数据库
mysql>update user set host='%' ,authentication_string = password("123456") where user='root'; #开启远程连接并修改密码
mysql>flush privileges; #刷新配置进内存 否则需要重启起效
如果防火墙没有禁止3306端口的话现在应该可以用图形化管理工具远程登录数据库了
二、克隆虚拟机镜像
参考:https://jingyan.baidu.com/article/da1091fb4d625b027849d684.html
使用VM进行虚拟机克隆作为mysql备份数据库服务器,步骤简单参考上方百度百科。
三、进行主从配置
参考:https://www.cnblogs.com/jianmingyuan/p/10903682.html
测试环境:
A服务器(主服务器Master):192.168.216.127
B服务器(从服务器Slave):192.168.216.128
主从服务器的Mysql版本皆为5.5.24
[Tip]主从库都创建数据库test并创建一个用于测试的数据表,节省掉备份步骤。
1.主库开启二进制备份功能
1.1添加my.cnf配置内容并重启mysql
server-id = 1 //唯一id
log-bin=mysql-bin //其中这两行是本来就有的,可以不用动,添加下面两行即可.指定日志文件
binlog-do-db = test //记录日志的数据库
binlog-ignore-db = mysql //不记录日志的数据库
1.2查询主库状态并记录 日志文件file,和当前位置position
2.主库增加同步账号,并开放repliction权限
mysql>grant replication slave on *.* to 'replicate'@'192.168.216.128' identified by '123456'; #创建同步用户replicate
mysql>flush privileges;
4.从库设置主从同步
4.1添加my.cnf配置内容并重启mysql
server-id = 2
log-bin=mysql-bin
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 30 #binlog过期清理时间
max_binlog_size = 1000m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
max_binlog_cache_size= 512m #最大binlog缓存大
replicate-do-db = test
replicate-ignore-db = mysql,information_schema,performance_schema
4.2用change mster 语句指定同步位置
mysql>stop slave; //先停止slave服务线程,这个是很重要的,如果不这样做会造成以下操作不成功。
mysql>change master to
>master_host='192.168.216.127',master_user='replicate',master_password='123456',
>master_log_file=' mysql-bin.000003 ',master_log_pos=154;
mysql>start slave;
4.3查询从库状态
如果Slave_IO_Running=Yes 且 Slave_SQL_Running=Yes则表示主从同步配置成功
若Slave_IO_Running=No 下面Last_IO_Error提示UUID冲突则是因为镜像拷贝导致的UUID重复
解决方案:
cd /data/mysql/data
rm -rf auto.cnf