今天说的实验是MySQL主从双向复制,实验环境为Master(Red Hat Enterprise Linux Server release 5.5 IP: 192.168.0.225)Slave(CentOS release 6.2 (Final) IP:192.168.0.214)

废话不多说,直接写如何实验过程。

  1. # cd /usr/local/src/mysql  
  2. # tar xzvf mysql-5.1.45.tar.gz  
  3. # groupadd mysql  
  4. # useradd -g mysql mysql  
  5. # cd mysql-5.1.45  
  6. #./configure --prefix=/usr/local/mysql --enable-local-infile --with-charset=utf8 --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-plugins=innobase  
  7. #make && make install 



配置mysql

  1. # cp support-files/my-medium.cnf /etc/my.cnf  
  2. # 修改 /etc.my.cnf 将skip-locking替换成skip-external-locking  
  3. # cd /usr/local/mysql  
  4. # bin/mysql_install_db --user=mysql  
  5. # mkdir tmp  
  6. # chown -R root .  
  7. # chown -R mysql var  
  8. # chown -R mysql tmp  
  9. # chgrp -R mysql .  
  10. # bin/mysqld_safe --user=mysql & //以mysql用户启动数据库。  


同样步骤在slave机器上安装完毕mysql
———————————————————————————————————————————————————————————————————————————————————
master my.cnf配置文件

  1. [root@defcon ~]# egrep -v '^$|^#' /etc/my.cnf  
  2. [client]  
  3. port = 3306  
  4. socket = /usr/local/mysql/tmp/mysql.sock  
  5. [mysqld]  
  6. port = 3306  
  7. socket = /usr/local/mysql/tmp/mysql.sock  
  8. skip-external-locking  
  9. key_buffer_size = 16M  
  10. max_allowed_packet = 1M  
  11. table_open_cache = 64  
  12. sort_buffer_size = 512K  
  13. net_buffer_length = 8K  
  14. read_buffer_size = 256K  
  15. read_rnd_buffer_size = 512K  
  16. myisam_sort_buffer_size = 8M  
  17. server-id1  
  18. master-host=192.168.0.214  
  19. master-user=shanker  
  20. master-password=1234  
  21. master-port=3306  
  22. master-connect-retry=60  
  23. replicate-do-db=testdba  
  24. log-bin  
  25. binlog-do-db=testdba  
  26. read-only=0  
  27. binlog-ignore-db=mysql  
  28.  
  29. log-bin=mysql-bin  
  30. binlog_format=mixed  
  31. [mysqldump]  
  32. quick  
  33. max_allowed_packet = 16M  
  34. [mysql]  
  35. no-auto-rehash  
  36. [myisamchk]  
  37. key_buffer_size = 20M  
  38. sort_buffer_size = 20M  
  39. read_buffer = 2M  
  40. write_buffer = 2M  
  41. [mysqlhotcopy]  
  42. interactive-timeout 

slave的my.cnf配置内容

  1. [root@shanker ~]# egrep -v '^$|^#' /etc/my.cnf  
  2. [client]  
  3. port = 3306  
  4. socket = /usr/local/mysql/tmp/mysql.sock  
  5. [mysqld]  
  6. port = 3306  
  7. socket = /usr/local/mysql/tmp/mysql.sock  
  8. skip-external-locking  
  9. key_buffer_size = 16M  
  10. max_allowed_packet = 1M  
  11. table_open_cache = 64  
  12. sort_buffer_size = 512K  
  13. net_buffer_length = 8K  
  14. read_buffer_size = 256K  
  15. read_rnd_buffer_size = 512K  
  16. myisam_sort_buffer_size = 8M  
  17. server-id=2  
  18. master-host=192.168.0.225  
  19. master-user=shanker  
  20. master-password=1234  
  21. master-port=3306  
  22. master-connect-retry=60  
  23. replicate-do-db=testdba  
  24. log-bin=/var/mysql/mysqllog  
  25. log-bin=mysql-bin  
  26. binlog_format=mixed  
  27. [mysqldump]  
  28. quick  
  29. max_allowed_packet = 16M  
  30. [mysql]  
  31. no-auto-rehash  
  32. [myisamchk]  
  33. key_buffer_size = 20M  
  34. sort_buffer_size = 20M  
  35. read_buffer = 2M  
  36. write_buffer = 2M  
  37. [mysqlhotcopy]  
  38. interactive-timeout  
  39. server-id=1  
  40. log-bin=/var/mysql/mysqllog  
  41. binlog-do-db=testdb  
  42. read-only=0  
  43. binlog-ignore-db=mysql  


配置文件修改完毕保存该配置并且删掉 mysql 的 var 目录下除数据库以外的文件。
主要是 *.00000* 类似的文件以及 master.info ,为避免出错,一定要先删除。

为了方便我写了个脚本,用来删除那些文件

  1. [root@shanker ~]# cat clearupvar  
  2. cd /usr/local/mysql/var  
  3. rm i* mysql-b* shanker* *.info 

shanker是主机的名字

主机上:

  1. # /usr/local/mysql/bin/mysql -uroot -p  
  2. mysql>create database testdb;  
  3. mysql>use testdb;  
  4. mysql>CREATE TABLE students(  
  5. sn INT,  
  6. name VARCHAR(20)  
  7. )  
  8. mysql> insert into students values(1,'shanker');  


从机上:

  1. /usr/local/mysql/bin/mysql -uroot  -p
  2. mysql>create database testdb;  
  3. mysql>CREATE TABLE students(  
  4. sn INT,  
  5. name VARCHAR(20)  
  6. )  
  7. mysql> insert into students values(2,'defcon'); 


创建用于同步的用户并赋予其操作权限(主机从机都要执行)

  1. # /usr/local/mysql/bin/mysql -uroot 
  2.  
  3. mysql>GRANT REPLICATION SLAVE ON *.* TO 'shanker'@'%' IDENTIFIED BY '1234'; 
  4.  
  5.  
  6. mysql>flush privileges 


主机 master :

mysql > show master status;

记住字段 file 和 position 的值,在 slave 状态中需要检验的。
从机 slave :

mysql > show slave status\G;


特别提示:检查参数 Slave_IO_State 、 Slave_IO_Running 、 Slave_SQL_Running


Slave_IO_State 的状态值是由 Slave_IO_Running 的值决定的,如果

Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes ,并且

Slave_IO_State 的值为 :Waiting for master to send event ,那么说

明配置是没问题的可以进行下一步同步尝试了。

 
看截图
 


done successfully ~~