目标:搭建mysql-32主机的数据库,实现两台主机的数据库主从复制。
搭建从服务器:
一、搭建好mysql-32主机的相关配置(网卡、yum源)。并且在mysql-31中做一份完全备份。
二、从mysql-31中移植绿色版数据库到mysql-32主机中,并且补充相关的包:
[root@Mysql-31 /usr/local]# scp -r mysql57/ 192.168.1.32:/usr/local/
[root@Mysql-31 /usr/local]# scp -r boost/ 192.168.1.32:/usr/local/
[root@mysql-32 /usr/local]# yum -y install gcc-c++ ncurses-devel cmake
三、创建mysql用户:
[root@mysql-32 /usr/local]# groupadd -g 27 mysql
[root@mysql-32 /usr/local]# useradd -u 27 -g mysql -M -s /sbin/nologin mysql
四、拷贝mysql配置文件,并且到从服务器修改mysql配置文件:
[root@Mysql-31 ~]# scp /etc/my.cnf 192.168.1.32:/etc/
修改从服务器mysql配置文件:1
2
3
4
5
6
7[root@mysql-32 /data]# vim /etc/my.cnf
##server-id不能一样,不然影响主从复制
server-id=32
##开启中继日志,主从复制参考的日志文件
relay-log=/log-bin/relay-log-bin
relay-log-index=/log-bin/relay-log-bin.index
五、把mysql-31的完全备份数据复制到mysql-32的数据目录中,并且修改相关权限:
[root@Mysql-31 /backup]# scp mysql-2019-09-23-18-57-48.tar.gz 192.168.1.32:/data/mysql/1
2
3
4
5
6
7
8
9
10
11[root@mysql-32 /data/mysql]# ls
mysql-2019-09-23-18-57-48.tar.gz
[root@mysql-32 /data/mysql]# tar xf mysql-2019-09-23-18-57-48.tar.gz
[root@mysql-32 /data/mysql]# ls
mysql-2019-09-23-18-57-48.tar.gz tmp-mysql
[root@mysql-32 /data/mysql]# mv tmp-mysql/* .
[root@mysql-32 /data/mysql]# rm -rf mysql-2019-09-23-18-57-48.tar.gz tmp-mysql/
[root@mysql-32 /data/mysql]# ls
auto.cnf class ib_buffer_pool ib_logfile1 mysql.pid sys
backup-my.cnf error.log ibdata1 ibtmp1 performance_schema xtrabackup_binlog_pos_innodb
BBS hello ib_logfile0 mysql slow.log xtrabackup_info
此时数据准备就绪,但还是要注意两点:
应该查看所有数据的所属者是不是mysql用户
修改/data/mysql目录下的auto.cnf文件,使两个UUID不一样
七、因为在配置文件中开启了二进制日志,所有也要创建相应文件夹:
[root@mysql-32 /]# mkdir log-bin
[root@mysql-32 /]# chown mysql:mysql log-bin/
八、启动数据库,注意此时还未开启主从复制功能,需要保持两个数据库数据一样,否则可能会发生错误:
[root@mysql-32 /data/mysql]# /usr/local/mysql57/support-files/mysql.server start
开启主从复制功能:
预防错误操作:
停止从服务复制操作,默认情况下,mysql启动服务时,如果有slave状态存在,会自启:
mysql> stop slave;
清空主库信息,重新初始化中继日志序列:
mysql> reset slave;
设置复制主服务的配置(二进制的位置应该在主服务中查询:mysql>show mater status):
mysql> change master to master_host=’192.168.1.31’,master_user=’li’,master_password=’123’,master_log_file=’mysql-bin.0000411’,master_log_pos=679;
开启主从复制:
mysql> start slave;
主服务器验证
查看当前登录数据库的用户:
mysql> mysql> show processlist;
从服务器验证
在主服务器中插入数据,然后在从服务器从可以查询到该数据
注意事项
从服务器应该开启只读功能,防止用户在从数据库中插入数据,不然可能会由于主键冲突等原因导致复制成功。
例子:
从服务器中插入:1
mysql> insert into hello.test1 values(11,'f',12);
主服务器中插入:1
mysql> insert into hello.test1 values(11,'f',13);
注:该表第一个字段为主键
恢复方法:删除从服务器中的数据,重新启动主从复制功能
这只能在一般情况下可惜,本次因为该表拥有一个触发器与外表关联,无论何种操作都不能执行成功从主服务器中读取的二进制日志。最后只能手动同步这些数据,然后重置主从复制服务。重新设置复制主服务的配置
再次查看从服务器状态:
开启只读功能,在配置文件中添加:1
2
3
4
5
6## 除了root@localhost 之外的用户操作均阻塞
read_only=ON
## 超级用户操作也会受阻
uper_read_only=ON
## 从服务器在有主信息存在的情况下,启动服务时,是否自动 start slave,默认是允许
skip-slave-start=ON
数据库配置文件参考
1 | [client] |
最后更新: 2019年10月05日 10:07