配置环境:
主从配置的环境,MySQL从服务器的版本不能小于主服务器的版本,最好保持版本一致!
一. MySQL主服务器配置
1.建立用户 mysql> GRANT ALL PRIVILEGES ON *.* TO dbadmin@'192.168.1.%' IDENTIFIED BY '123456' WITH GRANT OPTION; mysql> delete from mysql.user where password=""; mysql> flush privileges; 完成后需要在Slave上做连接测试: mysql -h 192.168.1.10 -u dbadmin –p123456
|
2.编辑配置文件/etc/my.cnf (确保有如下行) [mysqld] server-id = 1 log-bin=mysql-bin binlog-do-db=GameDB binlog-ignore-db=mysql #binlog-do-db=需要备份的数据库名,可写多行 #binlog-ignore-db=不需要备份的数据库名,可写多行
|
二.MySQL从服务器配置
1.编辑/etc/my.cnf server-id=2 log-bin=mysql-bin master-host=192.168.1.10 master-user=dbadmin master-password=123456 master-port=3306 replicate-do-db=GameDB # replicate-do-db=test 需要备份的数据库名 # replicate-ignore-db=mysql 忽略的数据库 # master-connect-retry=60 如果从服务器发现主服务器断掉,重新连接的时间差(秒)
|
三.验证是否配置正确
主从均配置完成后需要首先确认主从需要同步的库是否同步!(可以用copy库的方式使其同步)
登录从服务器输入如下命令对配置进行验证: mysql> show slave status\G; Waiting for master to send event Slave_IO_Running: Yes Slave_SQL_Running: Yes
|
四.其它应用
1、如果你想使用复制数据文件的方式来备份数据库,那么你只要在从服务器上的mysql命令行先键入slave stop;然后复制数据库文件,复制好了,再在mysql命令行键入slave start;启动从服务器,这样就即备份了数据有保证了数据完整性,而且整个过程中主服务器的mysql无需停止。
2、修改配置需要注意需要删除从服务器上的/var/lib/mysql/master.info文件,重新启动后会生成新的配置,否则新的配置无法生效!
3、主服务器上的相关命令 show master status show slave hosts show logs show binlog events purge logs to ‘log_name’ purge logs before ‘date’ reset master(老版本flush master) set sql_log_bin=
4、从服务器上的相关命令 slave start slave stop SLAVE STOP IO_THREAD //此线程把master段的日志写到本地 SLAVE start IO_THREAD SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库 SLAVE start SQL_THREAD reset slave SET GLOBAL SQL_SLAVE_SKIP_COUNTER load data from master show slave status(SUPER,REPLICATION CLIENT) CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息 PURGE MASTER [before 'date'] 删除master端已同步过的日志
5、产生的mysql-bin.00000x文件需要定期删除
6、同步出错时,如果被同步语句确定在从库上可以被忽略,那么做以下操作: slave stop; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n; slave start; 看show slave status \G;中的Seconds_Behind_Master: 0为正常
7、如果因为其他原因从不能同步,那么可以用下面语句来使从继续同步: slave stop; change master to master_log_file=’ mysql-bin.000001’,master_log_pos=8866; slave start;
|
五、同一台服务器上启动多个mysql实例:
如何在同一台服务器上启动多个mysql实例? 修改 /etc/my.cnf: (添加mysqld_multi段,修改添加 mysqldx) 如下配置:
[mysqld_multi] mysqld=/usr/local/mysql/bin/mysqld_safe mysqladmin=/usr/local/mysql/bin/mysqladmin user=mysql
[mysqld1] datadir=/db/mysql_3306 port = 3306 socket = /tmp/mysql_3306.sock skip-locking pid-file=/db/mysql_3306/DBServer-TJ45_3306.pid skip-name-resolv key_buffer = 384M max_allowed_packet = 1M table_cache =4096 sort_buffer_size = 4M read_buffer_size = 4M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache = 8 query_cache_size = 32M query_cache_limit = 1024 thread_concurrency = 8 master-host=192.168.1.10 master-user=ztgame master-password=123456 master-port=3306 server-id = 2 replicate-do-db=GameServer replicate-ignore-db=mysql master-connect-retry=60
[mysqld2] datadir=/db/mysql_3307 port = 3307 socket = /tmp/mysql_3307.sock skip-locking pid-file=/db/mysql_3307/DBServer-TJ45_3307.pid skip-name-resolv key_buffer = 384M max_allowed_packet = 1M table_cache =4096 sort_buffer_size = 4M read_buffer_size = 4M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache = 8 query_cache_size = 32M query_cache_limit = 1024 thread_concurrency = 8 master-host=192.168.1.20 master-user=ztgame master-password=123456 master-port=3306 server-id=2 replicate-do-db=GameServer replicate-ignore-db=mysql master-connect-retry=60
启动: mysqld_multi –config-file=/etc/my.cnf start|stop|report X #X就是[mysqldX] mysqld_multi start #启动所有的MYSQL服务 mysqld_multi report 1,2,3,4,5 #查看启动状态
关闭: mysqladmin shutdown -h192.168.1.1 -uroot -p123456 --socket=/tmp/mysql_3306.sock -P3306 mysqld_multi stop |
六、主从复制排错:
mysql 主从同步归纳大概有以下三中问题:
1、主从网络中断,或主服务器重启,或从服务器重启,从会根据配置文件中的时间(默认1分钟)去自动重连主服务器,直到网络和服务均可正常连接,连接正常后可自动继续同步之前文件,不需要任何人工干预!
2、当主从因为人为原因出现不同步的时候,可以用下面命令进行同步:
LOAD DATA FROM MASTER;
LOAD TABLE TBLNAME FROM MASTER;
注意,上面命令会对主数据库进行锁操作,如果数据库极大,建议在停机的时候进行,或者用短锁备份查看 show master status; 后,拷贝数据库的方式进行。
3、当 BIN-LOG 里面出现 SQL 级别错误导致主从不能同步的时候,可以用下面方法掠过该错误语句行,继续同步:
slave stop;
set global sql_slave_skip_counter=1;
slave start;
|
更多关于mysql复制的信息请参考:
阅读(1332) | 评论(0) | 转发(0) |