服务配置
/etc/mysql/my.cnf
主服务器Master
IP:61.164.186.242
重启生效
1 | /etc/init.d/mysql restart |
从服务器Slave
IP:61.164.186.241/246
6 | relay_log = mysql-relay-bin |
12 | slave-skip-errors = 1062 |
同步数据
将master数据库导出为master.sql
1 | mysqldump --single-transaction --all-databases --master-data=1 -hlocalhost -uroot -poP05_1ep > master.sql |
复制master.sql到slave服务器
1 | gzip -c master.sql | ssh root@61.164.186.241 "gunzip -c - >master.sql" |
分别到slave服务器上执行导入
1 | mysql -uroot -poP05_1ep < master.sql |
由于备份导入的是整个数据库,所以主从数据库的数据完全一致,包括mysql用户名密码都是一致的。
同步/etc/mysql/debian.cnf 中的管理密码;否则会导致/etc/init.d/mysql restart失败!系统找不到启动后的mysql进程。
1 | scp /etc/mysql/debian.cnf root@61.164.186.241:/etc/mysql/debian.cnf |
重启生效
1 | /etc/init.d/mysql restart |
把上面的所有命令用管道一次执行,哈哈^_^,直接将本服务器数据同步到另外一台服务器!!!
1 | mysqldump --single-transaction --all-databases --master-data=1 -hlocalhost -uroot -poP05_1ep | gzip -c - | ssh root@61.164.186.241 "gunzip -c - | mysql -uroot -poP05_1ep" |
启动复制
登录slave
设置master
1 | change master to master_host= '61.164.186.242' ,master_user= 'root' ,master_password= 'oP05_1ep' ; |
开始复制
查看状态
1 | Slave_IO_State: Waiting for master to send event |
2 | Master_Host: 61.164.186.242 #设置的master服务器 |
6 | Master_Log_File: mysql-bin.000004 |
7 | Read_Master_Log_Pos: 100764106 #同步读取二进制日志的位置,大于等于>=Exec_Master_Log_Pos |
8 | Relay_Log_File: mysqld-relay-bin.000010 |
9 | Relay_Log_Pos: 100764251 |
10 | Relay_Master_Log_File: mysql-bin.000004 |
12 | Slave_SQL_Running: Yes |
16 | Replicate_Ignore_Table: |
17 | Replicate_Wild_Do_Table: |
18 | Replicate_Wild_Ignore_Table: |
22 | Exec_Master_Log_Pos: 100764106 #同步执行二进制日志的位置,小于等于<=Read_Master_Log_Pos |
23 | Relay_Log_Space: 100764450 |
27 | Master_SSL_Allowed: No |
33 | Seconds_Behind_Master: 0 #从服务器数据比主服务器延迟多少秒?一般是0 |
34 | Master_SSL_Verify_Server_Cert: No |
问题
- 修改mysql配置,导致mysql无法启动?
答:请启用mysql错误日志,log_error = “/var/log/mysql/mysql.err”,检查错误日志内容。 - [ERROR] /usr/sbin/mysqld: Table ‘./web_td/trick_rates’ is marked as crashed and should be repaired?
答:编辑配置,在[mysqld]段内加入,myisam-recover = BACKUP,FORCE,强制修复表 - start slave失败,提示relay_log错误?
答:直接注释掉:relay_log = mysql-relay-bin - gzip -c -,gunzip -c -是什么意思?
答:一般来说命令是 gzip -c /file, – 是标准输入stdin;“gzip -c -”的意思是:读取标准输入(-),gzip后,输出到标准输出(-c)