目录
一.master主节点的服务器my.cnf配置
1.1:开启的binlog日志
二.node01节点从库服务器my.cnf配置
2.1:开启的binlog日志
三.主节点上创建复制账号并创建权限
3.1:初始化数据,备份主库,在从库上恢复,让从库与主库在某一位置时达到同步。
3.2:查看testdata.dmp ,得到binlog文件名和position 号
3.3: testdata.dmp复制到从服务器node01上,恢复从主库导出来的数据到node01节点。
3.4: 在从库上执行MySQL配置主从命令
3.4.1: 在从节点执行:start slave 命令,启动从服务复制功能。
3.4.2:查看主从复制状态命令
3.4.3:Slave_IO_Running或者Slave_SQL_Running不为Yes状态的解决方法
3.4.4: 在从节点执行:stop slave 命令,停止从服务复制功能(知晓)。
3.4.5:主从服务器测试验证,验证创库,新建表,添加数据,删除数据,修改数据。
4. 如果需要禁用主从复制,只需要在从服务器上执行命令
5.清空从库的所有配置信息的命令
四.如何保证主从复制数据一致性
4.1:在master主库上修改配置参数
4.2:在savle从库上修改配置参数
4.3:如何避免人为误操作在从库中修改数据
4.4: 从节点将无法修改数据,不影响主从同步
五.Mysql离线安装包下载
提示:主服务器master,从服务器node01。
一.master主节点的服务器my.cnf配置
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.socksymbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidcharacter-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144
#skip-grant-tables
#主库
################ settings start ###################
server-id=100 #主库server-id
log-bin=mysql-bin #开启binlog日志
binlog_format=row #row模式,保证后期不会出现数据不一致的情况
################ settings end ###################
1.1:开启的binlog日志
二.node01节点从库服务器my.cnf配置
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144
#skip-grant-tables#从库
################ settings stat ###################
log-bin=mysql-bin #[必须]启用二进制日志
server-id=101 #[必须]服务器唯一ID
binlog_format=row
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=on
relay_log_recovery=1
################ settings end ###################
2.1:开启的binlog日志
三.主节点上创建复制账号并创建权限
grant replication slave on *.* to 'mysync'@'%' identified by 'Abc123456';
flush privileges;
3.1:初始化数据,备份主库,在从库上恢复,让从库与主库在某一位置时达到同步。
这里用 mysqldump 做数据的备份导出操作
命令:
mysqldump -uroot -pAbc123456 --single-transaction --master-data=2 --databases testdata>/tmp/testdata.dmp
备注:--databases testdata 表示备份testdata数据库。如果数据量大,使用Xtrabackup 进行热备份也是可以的。
--single-transaction: 是为了得到一个一致性备份,在导出数据之前开启一个事务,由数据库保证单次导出数据的一致性,此时针对Innodb表所有的读写操作均不会被阻塞。
--master-data=2: 让备份出来的文件中记录备份这一时刻的binlog文件position号。
3.2:查看testdata.dmp ,得到binlog文件名和position 号
more /tmp/testdata.dmp
3.3: testdata.dmp复制到从服务器node01上,恢复从主库导出来的数据到node01节点。
scp testdata.dmp root@node01:/tmp/
[root@node01 tmp]# mysql -uroot -pAbc123456 </tmp/testdata.dmp
mysql: [Warning] Using a password on the command line interface can be insecure.
3.4: 在从库上执行MySQL配置主从命令
change master to master_host='172.16.25.205',
master_user='mysync',
master_password='Abc123456',
master_port=33306,
master_log_file='mysql-bin.000001',
master_log_pos=37611;
flush privileges;
备注:如果有ERROR 1776(HY000)报错,执行: change master to master_auto_position=0
3.4.1: 在从节点执行:start slave 命令,启动从服务复制功能。
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
3.4.2:查看主从复制状态命令
mysql> show slave status \G;
备注:如果Slave_IO_Running 和 Slave_SQL_Running 进程必须正常运行,既Yes状态,否则都是错误的状态(只要一个是NO的就属于错误的)
Slave_IO_Running: Yes // 必须是Yes
Slave_SQL_Running: Yes // 必须是Yes
Master_Log_File: mysql-bin.000001 // 是当前主库的二进制文件
Read_Master_Log_Pos: 37770 //是正在读取主库当前二进制的日志位置
Exec_Master_Log_Pos: 37770 //是执行到主库的二进制的日志中的位置
Seconds_Behind_Master: 0 //判断节点是否有延迟
完成以上步骤,主从服务器配置完成。
3.4.3:Slave_IO_Running或者Slave_SQL_Running不为Yes状态的解决方法
mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)mysql> change master to master_auto_position=0;
Query OK, 0 rows affected (0.11 sec)mysql> start slave;
Query OK, 0 rows affected (0.00 sec)mysql> show slave status \G;
3.4.4: 在从节点执行:stop slave 命令,停止从服务复制功能(知晓)。
mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)
3.4.5:主从服务器测试验证,验证创库,新建表,添加数据,删除数据,修改数据。
- 验证创建数据库,同步成功。
- 验证新建表同步成功。
- 验证添加,修改,删除数据成功。
4. 如果需要禁用主从复制,只需要在从服务器上执行命令
mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)
关闭主从同步即可。
5.清空从库的所有配置信息的命令
mysql> reset slave all;
Query OK, 0 rows affected (0.02 sec)
四.如何保证主从复制数据一致性
4.1:在master主库上修改配置参数
innodb_flush_log_at_trx_commit=1
sync_binlog=1
备注:确保数据高安全。
4.2:在savle从库上修改配置参数
master_info_repository="TABLE"
relay_log_info_repository="TABLE"
relay_log_recovery=1
备注:确保在slave上和复制相关的元数据表也采用InnoDB引擎,受到InnoDB事务安全的保护,并开启relay-log自动修复机制,这样发生宕机的时候根据relay_log_info中记录的已执行的binlog的位置从master上重新抓取回来再次应用,以避免数据丢失的可能性。
4.3:如何避免人为误操作在从库中修改数据
从节点上授权只读模式
set global read_only=1
备注:只读模式不会影响slave同步复制数据的功能,但是此时限制对于拥有的super权限用户无效,MySQL5.7版本增加了新的参数,使用set global super_read_only=ON限制超管用户。
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global super_read_only=ON;
Query OK, 0 rows affected (0.00 sec)
4.4: 从节点将无法修改数据,不影响主从同步
五.Mysql离线安装包下载
温馨提示:如果小编分享的对你有所帮助的话,麻烦点个赞,鼓励一下,小编也不容易。