1.前期准备
准备好2个服务器
1. 主服务器 39.100.10.183 有数据库有表
2. 从服务器 39.100.10.184 空服务器
主从服务器需要有相同的初态
1、将主服务器要同步的数据库枷锁,避免同步时数据发生改变
mysql>use db;
mysql>flush tables with read lock;
主数据库导出
mysqldump 数据库名称 -u root -p > 数据库名称.sql;
解锁主服务器数据库
mysql>unlock tables;
将导出的数据库发送到从服务器
gzip -c 数据库名称.sql | ssh root@39.100.10.184 "gunzip -c - > /root/数据库名称.sql"
从数据库导入
mysql>create database 数据库名称;
mysql>use 数据库名称;
mysql>source 数据库名称.sql;
2.主从配置
2.1主服务器配置
vi /etc/my.cnf
在[mysqld]中添加
server_id = 1
#开启二进制日志
log-bin = mysql-bin
#需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
binlog-do-db = 数据库名称
binlog_format = ROW
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 1
expire_logs_days = 7
log_bin_trust_function_creators = 1
重启mysql
service mysqld restart
允许root用户从服务器同步数据的账户
mysql>grant replication slave on *.* to 'root'@'%';
mysql>flush privileges;
查看服务器状态
mysql>show master status\G;
***************** 1. row ****************
File: mysql-bin.000004 #当前记录的日志
Position: 156 #日志中记录的位置
Binlog_Do_DB:
Binlog_Ignore_DB:
2.2 从服务器配置
vi /etc/my.cnf
在[mysqld]中添加
server_id = 2
log-bin = mysql-bin
log-slave-updates
sync_binlog = 0
#log buffer将每秒一次地写入log file中,并且log file的
innodb_flush_log_at_trx_commit = 0
#指定slave要复制哪个库
replicate-do-db = 数据库名称
slave-net-timeout = 60
log_bin_trust_function_creators = 1
执行同步命令
mysql>change master to MASTER_HOST='主服务器ip',MASTER_USER='root',MASTER_PASSWORD='root账户密码',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=156;
mysql>start slave;
查看状态
mysql>show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.20.111
Master_User: account
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000033
Read_Master_Log_Pos: 337523
Relay_Log_File: db2-relay-bin.000002
Relay_Log_Pos: 337686
Relay_Master_Log_File: mysql-bin.000033
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...
查看主从情况
mysql>GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'root'@'%';
Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即Yes状态,否则说明同步失败
若失败查看mysql错误日志中具体报错详情来进行问题定位
最后可以去主服务器上的数据库中创建表或者更新表数据来测试同步