主从的两种配置
第一种配置方式
mysql 启动:systemctl start mysql
配置主文件:vi /etc/my.cnf
添加:
server_id=1
gtid_mode=on
enforce_gtid_consistency=on #强制gtid一致性
#binlog
log_bin=master-binlog
log-slave-updates=1
binlog_format=row #row格式 其他格式可能造成数据不一致
#relay log
skip-slave-start=1 #防止复制线程随mysql服务自动启动
进入数据库:mysql -uroot -p (回车输入密码)
在主服务器上创建复制帐户: grant replication slave on *.* to 'repl'@'<从服务器的IP地址>%' identified by '123456';
退出数据库 exit
重启数据库:service mysql restart
在主服务器上备份全库:mysqldump -uroot -p --master-data=2 --single-transaction --set-gtid-purged=OFF -A > /tmp/mysqlbak_`date +%Y%m%d`.sql
重启数据库:service mysql restart
查看信息:ll /tmp/mysqlbak_20210519.sql (输入mysqlb之后直接用TAB键)
(复制/tmp/mysqlbak_20210519.sql一会要用)
进入数据库:mysql -uroot -p
导入mysql主备份的mysql到从服务器上:source /tmp/mysqlbak_20210519.sql (source 一下刚才复制)
查看数据库:show databases;
配置从主机
mysql启动:systemctl start mysql
配置从的文件:vi /etc/my.cnf
添加: (主和从的server id 不能相同)
server_id=2
gtid_mode=on
enforce_gtid_consistency=on
#binlog
log_bin=slave-binlog
log-slave-updates=1
binlog_format=row
#relay log
skip-slave-start=1
重启数据库:service mysql restart
进入数据库:mysql -uroot -p
查看gtid模式是否开启:show variables like '%gtid%'; ( gtid_mode是ON就是开启了)
配置从服务器上的连接:
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.100.10', (这个IP要用主服务器的IP地址)
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456', (要与前面的grant replication slave on *.* to 'repl'@'192.168.137.%' identified by '123456';命令配置的一致)
-> MASTER_PORT=3306,
-> MASTER_AUTO_POSITION=1,
-> MASTER_CONNECT_RETRY=10;
slave 开启:start slave
查看状态:show slave status\G
第二种配置方式
第一台主机上
修改配置文件:vi /etc/my.cnf
添加:
server_id=1
gtid_mode=on
enforce_gtid_consistency=on #强制gtid一致性
#binlog
log_bin=master-binlog
log-slave-updates=1
binlog_format=row #row格式 其他格式可能造成数据不一致
#relay log
skip-slave-start=1 #防止复制线程随mysql服务自动启动
重启mysql服务:/etc/init.d/mysql restart
export PATH=$PATH:/usr/local/mysql/bin/
备份mysql库:mysqldump -uroot -p mysql --set-gtid-purged=OFF > /tmp/mysql.sql
创建一个库保存数据:mysql -uroot -p -e "create database kei"
将mysql库恢复成新建的库,作为测试数据: mysql -uroot -p kei < /tmp/mysql.sql
进入数据库:mysql -uroot -p
创建同步数据用户并赋予权限:grant replication slave on *.* to 'repl' @192.168.100.6 identified by '123456';
(192.168.100.6是第二台主机的IP地址)
将表锁住,保持表内数据不变:flush tables with read lock;
显示主机状态: show master status;
配置第二台主要机
修改配置文件:vi /etc/my.cnf
添加:
server_id=2
gtid_mode=on
enforce_gtid_consistency=on
#binlog
log_bin=slave-binlog
log-slave-updates=1
binlog_format=row
#relay log
skip-slave-start=1
重启mysql 服务:/etc/init.d/mysql restart
在第一台主机止将文件拷贝到第二台主机上:scp /tmp/mysql.sql root@192.168.100.6:/tmp/
export PATH=$PATH:/usr/local/mysql/bin/
在第二台主机上创建一个和第一台主机上一样的库:mysql -uroot -p -e "create database kei"
将文件内容导入库: mysql -uroot -p kei < /tmp/mysql.sql
进入数据库:mysql -uroot -p
数据库配置“change master to master_host='192.168.100.10',master_user='repl',master_password='123456',master_log_file='linux1.000001',master_log_pos=698861;
(192.168.100.10是第一台主机的IP地址)
在第一台主机上执行解锁表:unlock tables;
在第二台主机开启slave服务:start slave;
查看状态:show slave status\G