最近在搞mysql的双主热备和宕机自切换的应用,把安装过程遇到的问题总结一下,以备后用。
参考资料
mysql双机热备的实现 : https://blog.csdn.net/qq394829044/article/details/53203645
keepalived :http://www.cnblogs.com/guantou1992/p/9729465.html
windows+ubuntu双系统安装:https://www.linuxidc.com/Linux/2016-04/130520.htm
系统:Ubuntu -16.04.3
A服务器:192.168.1.201
B服务器:192.168.1.201
apt-get install mysql-server
这样会自动安装最新版本的,我的是5.7.24。安装过程中会让输入root密码,须注意。
安装之后,root用户登录Mysql。
mysql -u root -p
回车输入密码。添加一个同步的用户user,密码123456,可以远程和本地登录,该帐户必须授予REPLICATION SLAVE权限,这里我们直接设置拥有所有权限。
grant all privileges on *.* to user@"%" identified by "123456";
@ 后面是访问mysql的客户端IP地址(或是 主机名) % 代表任意的客户端,localhost 代表只能本地登录。
flush privileges;
刷新刚才的内容。新建一个数据库test,test下有一个userinfo表,用于后面热备份的设置。
我们这里的双主的意思就是A和B互为主从服务器,既是主服务器也是从服务器。编辑mysql.cnf 路径 /etc/mysql/mysql.conf.d/mysqld.cnf。
A服务器:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = test
binlog_ignore_db = include_database_name
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2
replicate-do-db = test
replicate-ignore-db = mysql,information_schema
B服务器:
主要是把server-id 设置 2 。
[mysqld]
server-id = 2
log_bin = /var/log/mysql/mysql-bin
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = test
binlog_ignore_db = include_database_name
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2
replicate-do-db = test
replicate-ignore-db = mysql,information_schema
修改完配置文件后,保存后,分别重启一下两台服务器的mysql服务,如果成功则没问题。
/etc/init.d/mysql restart
分别查A服务器和B服务器作为主服务器的状态
登录数据库,执行命令查看:
show master status\G;
记下A和B这两台服务器的File和Position的参数,slave连接主服务器时需要设置。
接下来,分别在A和B上用change master to 命令指定同步的主服务器。
A服务器:
mysql>change master to
>master_host='192.168.1.202',master_user='user',master_password='123456',
> master_log_file='mysql-bin.000016',master_log_pos=515;
注:master_log_file对应B服务器master状态中的File,master_log_pos对应Position。
若操作不成功的话,可执行stop slave 停止slave线程 reset slave清除设置后再重新设置。change master to 执行完毕后,执行开启slave线程。
start slave;
查看slave的状态。
show slave status\G;
查看下面两项值均为Yes,即表示设置从服务器成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
同理B服务器:
mysql>change master to
>master_host='192.168.1.201',master_user='user',master_password='123456',
> master_log_file='mysql-bin.0000xx',master_log_pos=xxx;
查看B的slave的状态,是否设置成功。成功后,可分别在A和B数据库上做一些操作,看另一台是否会同步。