不积跬步,无以至千里;不积小流,无以成江海。

Mycat主从同步、读写分离、分库分表(2)- 配置Mysql主从同步

数据库 康康 1800℃ 0评论

上一篇文章我们在单台服务器安装并启动了3个Mysql实例,端口分别为,3306、3307、3308,本文我们基于上篇的环境配置mysql主从同步:

主(master):3306

从(slave):3307

从(slave):3308

配置主服务器(3306)

1.首先分别登陆三个mysql实例 ,创建三个数据库,以供测试。

  1. create database test_db;

在3306数据库创建一个用于同步数据的用户:

  1. mysql>grant replication slave on *.* to 'slaveuser'@'127.0.0.1' identified by '123456';
  2. mysql>flush privileges;

2.编辑/etc/my3306.cnf文件

  1. [client]
  2. port = 3306
  3. socket = /tmp/mysql3306.sock
  4. default-character-set=UTF
  5.  
  6. #主数据库master
  7.  
  8. basedir = /usr/local/mysql
  9.  
  10. datadir = /www/mysqldata3306
  11.  
  12. port = 3306
  13.  
  14. pid-file = /www/mysqldata3306/mysqld.pid
  15.  
  16. socket = /tmp/mysql3306.sock
  17.  
  18. character_set_server=utf8
  19.  
  20. #服务id
  21. server-id=1
  22.  
  23. #启用二进制日志-必须开启
  24. log-bin = mysql-bin
  25.  
  26. #需要同步的数据库
  27. binlog-do-db = test_db
  28.  
  29. #不需同步的数据库
  30. binlog-ignore-db=information_schema
  31. binlog-ignore-db=mysql
  32.  

3.重启3306端口的mysql服务

  1. #使用我们上篇写的脚本停止服务,也可直接查看pid然后Kill
  2. sh mysqlStop.sh 3306
  3. #启动
  4. mysqld_safe --defaults-extra-file=/etc/my3306.cnf --datadir=/www/mysqldata3306 --user=mysql &

重启后查看日志是否正常启动,然后登录3306,查看主库master信息

  1. #登录取mysql
  2. sh mysqlLogin.sh 3306
  3. #在mysql命令行界面执行
  4. show master status\G

得到如下信息,记住file和position的值,等会配置丛库要用:

  1. *************************** 1. row ***************************
  2. File: save-bin-log.000004
  3. Position: 1958
  4. Binlog_Do_DB:
  5. Binlog_Ignore_DB:
  6. Executed_Gtid_Set:
  7. 1 row in set (0.00 sec)

配置从服务(3307、3308)

1.停止3307服务,编辑/etc/my3307.cnf

  1. [client]
  2. port = 3307
  3.  
  4. socket = /tmp/mysql3307.sock
  5.  
  6. default-character-set=UTF
  7.  
  8. [mysqld]
  9.  
  10. basedir = /usr/local/mysql
  11.  
  12. datadir = /www/mysqldata3307
  13.  
  14. port = 3307
  15.  
  16. socket = /tmp/mysql3307.sock
  17.  
  18. character_set_server=utf8
  19.  
  20. pid-file = /www/mysqldata3307/mysqld.pid
  21.  
  22. ####从库设置############
  23.  
  24. server-id = 2
  25.  
  26. log-bin="/www/mysqldata3307/salve-bin-log"
  27.  
  28. #不需要备份的数据库;
  29. replicate-ignore-db=information_schema
  30. replicate-ignore-db=mysql
  31.  
  32. #需要备份的数据库
  33. replicate-do-db=test_db
  34. log-slave-update=1
  35.  
  36. #2天自动清理日志
  37. expire_logs_days=2
  38.  
  39. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  40.  
  41. [mysqld_safe]
  42. log-error=/www/mysqldata3307/mysqld.log
  43.  

2.停止3308服务,编辑/etc/my3308.cnf

配置同上、将 server-id改为3 ,所有3307改为3308

3.启动3307 ,并登录,设置丛库相关信息

首先停止slave

  1. #先停止slave
  2. mysql> stop slave;
  3. Query OK, 0 rows affected (0.00 sec)
  4. #设置相关信息
  5. mysql> change master to
  6.    -> master_host='127.0.0.1',
  7.    -> master_user='salveuser', //在主库设置的slave用户
  8.    -> master_password='123456', //在主库设置的密码
  9.    -> master_log_file='mysql-bin.000004', //注意这里对应刚刚在主库查询到的master status信息中的 file
  10.    -> master_log_pos=1958; //注意这里对应刚刚在主库查询到的master status信息 中的position
  11. #启动slave
  12. mysql> start slave;
  13. Query OK, 0 rows affected (0.00 sec)
  14.  
  15. #查看slave 状态
  16. mysql> show slave status\G
  17. *************************** 1. row ***************************
  18. Slave_IO_State: Waiting for master to send event
  19. Master_Host: 127.0.0.1
  20. Master_User: saveuser
  21. Master_Port: 3306
  22. Connect_Retry: 60
  23. Master_Log_File: mater-bin-log.000004
  24. Read_Master_Log_Pos: 1958
  25. Relay_Log_File: mysqld-relay-bin.000008
  26. Relay_Log_Pos: 2125
  27. Relay_Master_Log_File: mater-bin-log.000004
  28. Slave_IO_Running: Yes
  29. Slave_SQL_Running: Yes
  30. Replicate_Do_DB: test_db
  31. Replicate_Ignore_DB: mysql
  32. Replicate_Do_Table:
  33. Replicate_Ignore_Table:
  34. Replicate_Wild_Do_Table:
  35. Replicate_Wild_Ignore_Table:
  36. Last_Errno: 0
  37. Last_Error:
  38. Skip_Counter: 0
  39. Exec_Master_Log_Pos: 1958
  40. Relay_Log_Space: 2350
  41. Until_Condition: None
  42. Until_Log_File:
  43. Until_Log_Pos: 0
  44. Master_SSL_Allowed: No
  45. Master_SSL_CA_File:
  46. Master_SSL_CA_Path:
  47. Master_SSL_Cert:
  48. Master_SSL_Cipher:
  49. Master_SSL_Key:
  50. Seconds_Behind_Master: 0
  51. Master_SSL_Verify_Server_Cert: No
  52. Last_IO_Errno: 0
  53. Last_IO_Error:
  54. Last_SQL_Errno: 0
  55. Last_SQL_Error:
  56. Replicate_Ignore_Server_Ids:
  57. Master_Server_Id: 1
  58. Master_UUID: b019fc43-70e7-11e7-b86c-00163e063f95
  59. Master_Info_File: /www/mysqldata3307/master.info
  60. SQL_Delay: 0
  61. SQL_Remaining_Delay: NULL
  62. Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
  63. Master_Retry_Count: 86400
  64. Master_Bind:
  65. Last_IO_Error_Timestamp:
  66. Last_SQL_Error_Timestamp:
  67. Master_SSL_Crl:
  68. Master_SSL_Crlpath:
  69. Retrieved_Gtid_Set:
  70. Executed_Gtid_Set:
  71. Auto_Position: 0
  72. 1 row in set (0.00 sec)

看到

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

即为配置成功

4.启动3308配置相关信息

具体操作同第3步

5.测试主从同步是否正常

在主库中创建一个测试表t_user并插入一条数据:

  1. mysql> use test_db;
  2. Database changed
  3. mysql> create table t_user (userid int primary key , username varchar(20) , birth date , address varchar(100));
  4. Query OK, 0 rows affected (0.02 sec)
  5. mysql> insert into t_user (userid , username , birth, address) values (1,'zhangsan','1997-01-01','sss');
  6. Query OK, 0 rows affected (0.02 sec)
  7. mysql> show tables;
  8. +-------------------+
  9. | Tables_in_test_db |
  10. +-------------------+
  11. | t_user |
  12. +-------------------+
  13. 1 row in set (0.00 sec)

在3307和3308分别查看是否已经有t_user

 

其他实验

转载请注明:左手代码右手诗 » Mycat主从同步、读写分离、分库分表(2)- 配置Mysql主从同步

喜欢 (1)or分享 (0)
发表我的评论
取消评论

 

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址