欢迎光临~~ 在这里你会看到一些工作中遇到的问题和生活中的感悟

配置Mysql主从复制

Linux Jake 1041℃ 0评论
为了保证数据的可靠性和延展性,准备对线上数据库做主从,配置过程比较简单。 主库配置文件/etc/my.cnf [mysqld] server-id=1 #可以为任意值,只要主从不一样即可 log-bin=mysqlmaster-bin.log sync_binlog=1 log_bin_trust_function_creators=1 innodb_buffer_pool_size=512M innodb_flush_log_at_trx_commit=1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES lower_case_table_names=1   #忽略大小写 修改从数据库配置文件/etc/my.cnf server-id=2 log-bin=mysqlslave-bin.log sync_binlog=1 log_bin_trust_function_creators=1 innodb_buffer_pool_size=512M innodb_flush_log_at_trx_commit=1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES lower_case_table_names=1 在主数据库和从数据库服务器上分别执行以下命令重新启动主数据库和从数据库 [root@master ~]# service mysql restart [root@slave ~]# service mysql restart 在主数据库上创建用于主从复制的账户 [root@master ~]# mysql -uroot -p mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.10.10.3' IDENTIFIED BY 'slave#10'; Query OK, 0 rows affected (0.00 sec) 注意:以上命令中的IP地址,是从数据库服务器的IP地址。 查看主数据库的状态(并记录下File字段和Position字段的值,在配置从服务器时有用到) mysql> show master status; +------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000031 | 260 | | | | +------------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) 第九步:创建主数据库的快照文件 [root@master ~]#mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >>/data/all.sql 解锁主数据库的锁表操作 [root@master ~]# mysql -uroot -p (本命令在主数据库服务器上执行) mysql> unlock tables; Query OK, 0 rows affected (0.00 sec) 在从数据库服务器上导入创建的快照文件到从数据库中 [root@slave ~]# mysql -uroot -p -h127.0.0.1 -P3306 < /data/all.sql 在从数据库服务器上设置主数据库服务器向从数据库服务器同步 [root@slave ~]# mysql -uroot -p mysql> change master to master_host = '10.10.10.2',master_user='slave',master_password='slave#10',master_log_file='mysql-bin.000031',master_log_pos=260; 注意:红色部分的值,是在第八步中查出来的,这里不能弄错了 第十三步:启动从数据库复制线程 mysql> start slave; Query OK, 0 rows affected (0.01 sec) 第十四步:查询从数据库的复制线程状态 mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.10.10.2 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqlmaster-bin.000004 Read_Master_Log_Pos: 327 Relay_Log_File: slave-relay-bin.000002 Relay_Log_Pos: 289 Relay_Master_Log_File: mysqlmaster-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 327 Relay_Log_Space: 462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 2e5e1b22-f0a9-11e3-bbac-000c297799e0 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec) 如果Slave_IO_RunningSlave_SQL_Running两项都为yes,就表示主从复制配置成功了. 主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标) mysql> flush tables with read lock; Query OK, 0 rows affected (0.00 sec) 下面可以开始测试配置是否成功了,首先在主数据库的test数据库中新建一张表,然后插入几条数据,然后到从数据库看看是否同步过来了。 注意:当从数据库有大量的查询时,可以暂时将从数据库的复制线程关闭掉,等查询量降下来了,再打开,这样也不会丢失数据。

转载请注明:技术拾零 » 配置Mysql主从复制

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

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

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