Mysql主從同步部署

Mysql主從同步部署 mysql

 概述sql

一、Mysql主從同從優勢

在從服務器能夠執行查詢工做,下降主服務器壓力。 數據庫

在從主服務器進行備份,避免備份期間影響主服務器服務。 vim

當主服務器出現問題時,能夠切換到從服務器。  服務器

二、Mysql複製概述

    複製過程當中一服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌能夠記錄發送到從服務器的更新。當一個從服務器鏈接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,而後封鎖並等待主服務器通知新的更新。  socket

Mysql使用3個線程來執行復制功能,其中兩個線程(Sql線程和IO線程)在從服務器,另一個線程(IO線程)在主服務器。當發出START SLAVE時,從服務器建立一個I/O線程,以鏈接主服務器並讓它發送記錄在其二進制日誌中的語句。主服務器建立一個線程將二進制日誌中的內容發送到從服務器。該線程能夠即爲主服務器上SHOW PROCESSLIST的輸出中的Binlog Dump線程。從服務器I/O線程讀取主服務器Binlog Dump線程發送的內容並將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日誌。第3個線程是SQL線程,由從服務器建立,用於讀取中繼日誌並執行日誌中包含的更新。在從服務器上,讀取和執行更新語句被分紅兩個獨立的任務。當從服務器啓動時,其I/O線程能夠很快地從主服務器索取全部二進制日誌內容,即便SQL線程執行更新的遠遠滯後。  ide

1、Mysql安裝(主從)

1、環境介紹

主服務器: 測試

IP地址:192.168.0.10 主機名稱:masterdb01 spa

從服務器: 線程

IP地址:192.168.0.11 主機名稱:slavedb02

2、安裝依賴包

[root@masterdb01 ~]# yum -y install gcc perl-DBI perl-DBD-MySQL unixODBC ncurses-devel

3、安裝Mysql

[root@masterdb01 ~]# tar xvf mysql-5.1.44.tar.gz -C /usr/local/src/

[root@masterdb01 ~]# cd /usr/local/src/mysql-5.1.44/

[root@masterdb01 ~]# useradd mysql -M -s /sbin/nologin

[root@masterdb01 mysql-5.1.44]# vim configure

註釋$RM "$cfgfile"  這一行(不然編譯時會報錯)

[root@masterdb01 mysql-5.1.44]# ./configure --prefix=/usr/local/mysql-5.1.44 --with-unix-socket-path=/usr/local/mysql-5.1.44/data/mysql.sock --localstatedir=/usr/local/mysql-5.1.44/data/ --without-debug --enable-thread-safe-client --enable-assembler --enable-profiling --enable-community-features --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-extra-charsets=all --with-plugins=innobase --with-mysqld-user=mysql --without-embedded-server --with-server-suffix=-community

[root@masterdb01 mysql-5.1.44]# make

[root@masterdb01 mysql-5.1.44]# make install

[root@masterdb01 mysql-5.1.44]# chown -R root.mysql /usr/local/mysql-5.1.44/

[root@masterdb01 mysql-5.1.44]# ./scripts/mysql_install_db --user=mysql

[root@masterdb01 mysql-5.1.44]# cp support-files/my-medium.cnf /etc/my.cnf 

[root@masterdb01 mysql-5.1.44]# chown -R mysql.mysql /usr/local/mysql-5.1.44/data/

[root@masterdb01 mysql-5.1.44]# cd /usr/local/mysql-5.1.44/libexec/

[root@masterdb01 libexec]# cp mysqld mysqld.old

[root@masterdb01 libexec]# strip mysqld

[root@masterdb01 libexec]# echo "/usr/local/mysql-5.1.44/lib/mysql/" >> /etc/ld.so.conf

[root@masterdb01 libexec]# ldconfig 

[root@masterdb01 libexec]# /usr/local/mysql-5.1.44/bin/mysqld_safe &

[root@masterdb01 libexec]# /usr/local/mysql-5.1.44/bin/mysqladmin -u root password "redhat"

[root@masterdb01 libexec]# export PATH=$PATH:/usr/local/mysql-5.1.44/bin/

[root@masterdb01 libexec]# echo "export PATH=$PATH:/usr/local/mysql-5.1.44/bin/" >> /etc/profile

[root@masterdb01 libexec]# echo "/usr/local/mysql-5.1.44/bin/mysqld_safe &" >> /etc/rc.local 

[root@masterdb01 libexec]# /usr/local/mysql-5.1.44/bin/mysql -u root -p

Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.1.44-community-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| test               |

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

3 rows in set (0.00 sec)

mysql> 

到此mysql安裝完畢

注:上述配置主從機器都須要配置。

2、Mysql主從配置

1、主服務器配置

1、建立同步用戶

mysql> grant replication slave on *.* to 'replication'@'192.168.0.11' identified by 'replication';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

Slave上測試: mysql -h 192.168.0.10 -u replication -preplication 

2、修改主服務器mysql主配置文件

首先關閉數據庫在修改

[mysqld]  

socket = /usr/local/mysql-5.1.44/data/mysql.sock
server-id = 1  
log-bin=mysql-bin 
binlog_format=mixed 

Log-slave-updates

log = /var/log/mysql.log

log-error = /var/log/mysql_error.log

long_query_time = 2

log-slow-queries = /var/log/mysql_slow.log

log_queries_not_using_indexes 

註釋以下三行

#log-bin=mysql-bin

#binlog_format=mixed

#server-id      = 1

配置文件詳解:

server-id=1 表明主庫,2表明從庫 配置一個惟一的ID編號,編號範圍1-32

log-bin=mysql-bin 這個是必須的表示開啓二進制日誌計入。

bin-do-db=test 須要同步的數據庫,若是沒有本行 表示同步全部的數據庫。

binlog-ignore-db=test1 表示不須要同步的數據庫名。

log-slave-updates 這個參數必定要加上,不然不會給更新的記錄寫到二進制文件裏(不打開也能夠,只是開了之後你能夠在從上時時日誌恢復)。

expire_logs_days=5 (爲避免日誌文件過大,設置過時時間爲5天超過5天自動刪除,通常生產系統設置爲0) 

slave-skip-errors 跳過錯誤,繼續執行復制操做。

重啓mysql

[root@masterdb01 ~]# mysqladmin shutdown -u root -predhat

[root@masterdb01 ~]# /usr/local/mysql-5.1.44/bin/mysqld_safe &

啓動時報錯

mysqld_safe mysqld from pid file /usr/local/mysql-5.1.44/data/masterdb01.pid ended

[root@masterdb01 ~]# mysql -u root -p

Enter password: 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql-5.1.44/data/mysql.sock' (2)

問題解決

原來是mysql用戶和權限的問題,重建mysql用戶從新修改權限

[root@masterdb01 ~]# useradd mysql -M -s /sbin/nologin 

[root@masterdb01 ~]# chown -R root.mysql /usr/local/mysql-5.1.44/

[root@masterdb01 ~]# chown -R mysql.mysql /usr/local/mysql-5.1.44/data/

再重新啓動mysql  ok問題解決

Mysql啓動時能夠查看日誌有沒有報錯

[root@masterdb01 ~]# tailf /usr/local/mysql-5.1.44/data/masterdb01.err

3、數據同步

第一次同步以前,確保兩邊的數據是同步的。

拷貝時首先須要關閉mysql數據庫。

2、從服務器配置

1、修改從服務器mysql主配置文件

首先關閉數據庫在修改

[root@slavedb02 ~]# vim /etc/my.cnf

socket = /usr/local/mysql-5.1.44/data/mysql.sock

server-id = 2

log-bin=mysql-bin

binlog_format=mixed

log-slave-updates

log = /var/log/mysql.log

log-error = /var/log/mysql_error.log

long_query_time = 2

log-slow-queries = /var/log/mysql_slow.log

log_queries_not_using_indexes 

註釋以下三行

#log-bin=mysql-bin

#binlog_format=mixed

#server-id      = 1

從新啓動mysql

[root@slavedb02 ~]# mysqld_safe &

2、指定同步位置(change master

主服務器查看

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000005 |      106 |              |                  | 

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

1 row in set (0.00 sec)

從服務器設置

mysql> change master to master_host='192.168.0.10',master_user='replication',master_password='replication',master_log_file='mysql-bin.000003',master_log_pos=106;

Query OK, 0 rows affected (0.03 sec)

3、啓動從服務器線程

mysql> start slave;

Query OK, 0 rows affected (0.03 sec)

查看從服務器狀態

mysql> show slave status\G;

          Slave_IO_Running: No

         Slave_SQL_Running: Yes

問題處理

查看原來主從兩邊的數據不一直致使的

主服務器上 /usr/local/mysql-5.1.44/data下多一個masterdb01.err文件

將其拷貝到從服務器修改屬主屬組

mysql> slave stop;

mysql> slave start;

mysql> show slave status\G;

          Slave_IO_Running: Yes

         Slave_SQL_Running: Yes

ok問題解決

三、驗證過程

1、在主服務器建立庫和表

mysql> create database test1;

Query OK, 1 row affected (0.03 sec)

mysql> use test1;

Database changed

mysql> create table name (id int(4),name varchar(20));

Query OK, 0 rows affected (0.01 sec)

mysql> insert into name values (1,'test');

Query OK, 1 row affected (0.00 sec)

mysql> select * from name;

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

| id   | name |

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

|    1 | test |

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

1 row in set (0.00 sec)

2、在從服務器確認

mysql> show databases;

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

| Database           |

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

| information_schema | 

| mysql              | 

| test               | 

| test1              | 

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

4 rows in set (0.00 sec)

mysql> use test1;

Database changed

mysql> show tables;

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

| Tables_in_test1 |

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

| name            | 

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

1 row in set (0.03 sec)

mysql> select * from name;

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

| id   | name |

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

|    1 | test | 

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

1 row in set (0.00 sec)

mysql> 

Ok同步

3、Mysql雙向同步配置

從服務器配置

1、在從服務器建立同步賬號

mysql> grant replication slave on *.* to 'replication'@'192.168.0.10' identified by 'replication';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

Master上測試: mysql -h 192.168.0.11 -u replication -preplication

2、指定同步位置

從服務器上查看

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000005 |      106 |              |                  | 

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

1 row in set (0.00 sec)

主服務器配置

mysql> change master to master_host='192.168.0.11',master_user='replication',master_password='replication',master_log_file='mysql-bin.000005',master_log_pos=106;

Query OK, 0 rows affected (0.03 sec)

3、啓動服務器線程

mysql> start slave;

Query OK, 0 rows affected (0.03 sec)

查看從服務器狀態

mysql> show slave status\G;

          Slave_IO_Running: Yes

         Slave_SQL_Running: Yes

4、測試

在從庫上建立庫,看主是否能夠正常同步

4、平常維護

一、查看binlog是否開啓

mysql> show variables like '%log%';

二、查看mysql的server_id

mysql> show variables like 'server_id';

三、查看全部二進制文件和大小

mysql> show binary logs;

刪除二進制文件

mysql> purge binary logs to 'mysql-bin.0000010';

刪除二進制文件mysql-bin.0000010,保留後面的。

四、查看mysql主的狀態

mysql> show master status;

五、查看mysql從的狀態

mysql> show slave status\G;

確認Slave_IO 和 Slave_SQL是否都爲yes

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

六、mysql啓動關閉

[root@slavedb02 ~]# mysqladmin shutdown -u root -predhat

[root@slavedb02 ~]# mysqld_safe &

七、Slave線程啓動和關閉

mysql> slave stop;

mysql> slave start;

相關文章
相關標籤/搜索