日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版

發布時間:2025/3/21 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL5.6主從復制(讀寫分離)教程

1、MySQL5.6開始主從復制有兩種方式:

基于日志(binlog);

基于GTID(全局事務標示符)。

需要注意的是:GTID方式不支持臨時表!所以如果你的業務系統要用到臨時表的話就不要考慮這種方式了,

至少目前最新版本MySQL5.6.12的GTID復制還是不支持臨時表的。

所以本教程主要是告訴大家如何通過日志(binlog)方式做主從復制!

2、MySQL官方提供的MySQL Replication教程:

http://dev.mysql.com/doc/refman/5.6/en/replication.html

第一步:準備工作

主服務器: 192.168.1.100

從服務器: 192.168.1.101

MySQL軟件版本:

MySQL-server-advanced-5.6.18-1.el6.x86_64.rpm

MySQL-cient-advanced-5.6.18-1.el6.x86_64.rpm

第二步:在主服務器和從服務器上安裝MySQL數據庫軟件

安裝方法,請參見

MySQL5.6.18 for RHEL/OralceLinux 6.5 安裝

MySQL數據庫軟件安裝完成后,不要急著做mysql啟動操作。建議把mysql初始化生成的/usr/my.cnf

(如果是從源文件編譯安裝時,路徑應該是在/usr/local/mysql/mysql.cnf)刪除,然后把優化好的mysql

配置文件my.cnf放到/etc下。

第三步:修改主數據庫的配置文件/usr/my.cnf

[mysqld]

server-id=1

log-bin=mysqlmaster-bin.log

sync_binlog=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

log_bin_trust_function_creators=1

第四步:修改從數據庫配置文件/usr/my.cnf

server-id=2

log-bin=mysqlslave-bin.log

sync_binlog=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

log_bin_trust_function_creators=1

第五步:在主數據庫和從數據庫服務器上分別執行以下命令重新啟動主數據庫和從數據庫

[root@master ~]# service mysql restart

[root@slave ~]# service mysql restart

第六步:在主數據庫上創建用于主從復制的賬戶

[root@master ~]# mysql -uroot -p

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101' IDENTIFIED BY '111111';

Query OK, 0 rows affected (0.00 sec)

注意:以上命令中的IP地址,是從數據庫服務器的IP地址。

第七步:主數據庫鎖表(禁止再插入數據以獲取主數據庫的的二進制日志坐標)

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

第八步:查看主數據庫的狀態(并記錄下File字段和Position字段的值,在配置從服務器時有用到)

mysql> show master status;

+------------------------+----------+--------------+------------------+-------------------+

| File ? ? ? ? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------------+----------+--------------+------------------+-------------------+

| mysqlmaster-bin.000004 | ? ? ?327 | ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? |

+------------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

第九步:創建主數據庫的快照文件

[root@master ~]# cd /usr/bin/

# ./mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >>/mnt/windows/all.sql

上面命令中的紅色部分,是一個共享目錄,這個目錄可以同時被主數據庫服務器和從數據庫服務器訪問到。

如果沒有這樣的共享目錄,可以將all.sql放在其它任何目錄下,然后使用scp命令復制到遠程從數據庫服務器的某個目錄中

這條命令的執行時間根據數據量的不同,會有所不同,如果主數據庫的數據量很大,可能需要很長時間,那么在這種情況下,就最好在

晚上沒有業務的時候進行這個操作,否則第七步中的鎖表操作會對業務系統造成很大的影響

第十步:解鎖主數據庫的鎖表操作

[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 < /mnt/windows/all.sql

第十二步:在從數據庫服務器上設置主數據庫服務器向從數據庫服務器同步

[root@slave ~]# mysql -uroot -p

mysql> change master to master_host = '192.168.1.100',master_user='repl',master_password='111111',master_log_file='mysqlmaster-bin.000004',master_log_pos=327;

注意:紅色部分的值,是在第八步中查出來的,這里不能弄錯了

第十三步:啟動從數據庫復制線程

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: 192.168.1.100

Master_User: repl

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_Running和Slave_SQL_Running兩項都為yes,就表示主從復制配置成功了.

下面可以開始測試配置是否成功了,首先在主數據庫的test數據庫中新建一張表,然后插入幾條數據,然后到從數據庫看看是否同步過來了。

注意:當從數據庫有大量的查詢時,可以暫時將從數據庫的復制線程關閉掉,等查詢量降下來了,再打開,這樣也不會丟失數據。

附:一個優化好后的主數據庫配置文件和從數據配置文件內容如下:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[client]

port=3306

socket=/usr/local/mysql/mysql.sock

default-character-set=utf8

[mysqld]

sync_binlog=1

server-id=1

port=3306

socket=/usr/local/mysql/mysql.sock

pid-file=/home/mysql/temp/my3306.pid

user=mysql

datadir=/home/mysql/data

tmpdir=/home/mysql/temp/

log-bin=/home/mysql/data/mysqlmaster-bin

log-error=/home/mysql/logs/error.log

slow_query_log_file=/home/mysql/logs/slow.log

binlog_format=mixed

slow_query_log

long_query_time=10

wait_timeout=31536000

interactive_timeout=31536000

max_connections=500

max_user_connections=490

max_connect_errors=2

character_set_server=utf8

skip-external-locking

key_buffer_size = 128M

max_allowed_packet = 5M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 4

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

expire-logs-days=10

skip-slave-start

skip-name-resolve

lower_case_table_names=1

log_bin_trust_function_creators=1

# InnoDB

innodb_data_home_dir=/home/mysql/data

innodb_log_group_home_dir=/home/mysql/logs

innodb_data_file_path=ibdata1:128M:autoextend

innodb_buffer_pool_size=2G

innodb_log_file_size=10M

innodb_log_buffer_size=8M

innodb_lock_wait_timeout=50

innodb_file_per_table

innodb_flush_log_at_trx_commit=1

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

一個優化好的從數據庫的配置文件如下:

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[client]

port=3306

socket=/usr/local/mysql/mysql.sock

default-character-set=utf8

[mysqld]

sync_binlog=1

server-id=2

port=3306

socket=/usr/local/mysql/mysql.sock

pid-file=/home/mysql/temp/my3306.pid

user=mysql

datadir=/home/mysql/data

tmpdir=/home/mysql/temp/

log-bin=/home/mysql/data/mysqlslave-bin

log-error=/home/mysql/logs/error.log

slow_query_log_file=/home/mysql/logs/slow.log

binlog_format=mixed

slow_query_log

long_query_time=10

wait_timeout=31536000

interactive_timeout=31536000

max_connections=500

max_user_connections=490

max_connect_errors=2

character_set_server=utf8

skip-external-locking

key_buffer_size = 128M

max_allowed_packet = 5M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 4

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

expire-logs-days=10

#skip-slave-start

skip-name-resolve

lower_case_table_names=1

log_bin_trust_function_creators=1

# InnoDB

innodb_data_home_dir=/home/mysql/data

innodb_log_group_home_dir=/home/mysql/logs

innodb_data_file_path=ibdata1:128M:autoextend

innodb_buffer_pool_size=2G

innodb_log_file_size=10M

innodb_log_buffer_size=8M

innodb_lock_wait_timeout=50

innodb_file_per_table

innodb_flush_log_at_trx_commit=1

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 256K

sort_buffer_size = 256K

read_buffer = 256K

write_buffer = 256K

[mysqlhotcopy]

interactive-timeout

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 256K

sort_buffer_size = 256K

read_buffer = 256K

write_buffer = 256K

[mysqlhotcopy]

interactive-timeout

總結

以上是生活随笔為你收集整理的mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。