MYSQL主從搭建5.6.38

germany006發表於2018-04-12

一、MySQL主從複製搭建

MySQL主從複製搭建主要步驟有:安裝mysql軟體、Master端配置部署、Slave端配置部署、建立主從同步
安裝作業系統環境:REDHAT6.5

以下內容都是自己在虛擬機器親測

1、安裝MYSQL

a、環境準備及軟體安裝


安裝環境:

NODE1 主機名 master      IP地址 192.168.159.128

NODE2 主機名 slave       IP地址 192.168.159.129

 

b、安裝MYSQL 主從都要進行安裝

#tar zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz -C  /usr/local/

# cd /usr/local/

# mv mysql-5.6.38-linux-glibc2.12-x86_64 mysql

# cd mysql

# groupadd mysql

# useradd -g mysql mysql

# passwd mysql
      # cd  /usr/local/

#  chown -R mysql.mysql mysql

# ./script/mysql_install_db --user=mysql
      # cd /usr/local/mysql
      # chown -R root:root ./
      # chown -R mysql:mysql data

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

# chmod u+x /etc/rc.d/init.d/mysqld

# chkconfig --add mysqld

# /etc/rc.d/init.d/mysqld start

 
在這裡是採用的簡易安裝,如果想要在生產環境使用,想自己指定需要的引數,建議還是使用原始碼安裝


注:主從都使用yum install 的方式安裝系統自帶的mysql也可以使用,親測搭建成功,只是版本會比較低

2、Master端配置部署

a、在主伺服器上的my.cnf配置檔案中的[mysqld]節點下新增以下配置

黃色部分為新新增

vi /etc/my.cnf

[mysqld]

server-id=101

log-bin=/var/lib/mysql/mysql-bin.log

log-bin-index=/var/lib/mysql/mysql-bin.index

expire_logs_days=30

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

說明:

log-bin :給出二進位制日誌的所有檔案基礎名

log-bin-index :給出二進位制日誌檔案的檔名,通常以000001開始,順序遞增。全名:master-bin.000001

server-id :mysql伺服器唯一ID,在主從複製的所有伺服器中必須唯一。

 

b、建立使用者,並賦予許可權:

create user repl_user;

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY PASSWORD '******';

設定密碼時會遇到報錯:

ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number

解決辦法:用select password('你想輸入的密碼');查詢出你的密碼對應的字串

select password('123456');

查出的是*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

2、Slave端配置部署

a 、配置引數: [mysqld]

黃色部分為新新增

vi /etc/my.cnf

[mysqld]

server-id=102

log-bin=/var/lib/mysql/mysql-relay-bin.log

log-bin-index=/var/lib/mysql/mysql-relay-bin.index

relay_log_purge=on

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is  recommended to prevent assorted security risks

symbolic-links=0

 

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

 

3、建立主從同步

(重建備庫使用該方法,備庫和主庫是正常資料同步狀態)

建立主從同步可以從主庫上匯出資料,也可以從已有的從庫上匯出資料,然後再匯入到新的從庫中,change master to建立同步。


3.1 、匯出資料

在主庫上匯出資料:

mysqldump -u***-p***-S /data/mysql6001/mysql.sock        --default-character-set=utf8 –q --single-transaction --master-data-A >  /tmp/all_database.sql

(重建備庫時)也可在從庫上匯出資料:(我這裡是測試環境,所以對於我來說都是新建的資料庫,所以無所謂啦)

mysqldump -u***-p***-S /data/mysql6001/mysql.sock --default-character-set=utf8 -q --single-transaction --dump-slave-A  >  /tmp/all_database.sql

NOTES

--master-data和--dump-slave匯出的備份中,會包含master_log_file和master_log_pos資訊。

--master-data選項的作用,是將二進位制的資訊寫入到輸出檔案中,在這裡是寫入到備份的sql檔案中。

--dump-slave選項的作用,是使用者在slave端dump資料,建立新的slave,至少是第2個slave,也就是已經有A-->B,現在從B上匯出資料建立A-->C的複製, 這個不但可以用於建立slave,還可用於備份中,用於讀binlog進行roll forward的起點

例子:(實際直接主庫全庫匯出即可)

mysqldump -uroot --events --all-databases > /opt/mysql.dump


 

3.2、從庫匯入資料

mysql -u*** -p*** --default-character-set=utf8< all_database.sql

 

例子:

mysql -uroot <mysql.dump </mysql.dump

 

3.3、從庫與主機建立同步

以下為建立主從同步最基本的 6 個項: change master to

master_host='xxx.xxx.xxx.xxx',    # 主庫 IP

master_port=6001,              # 主庫 mysqld 的埠

master_user='repl',             # 主庫中建立的有 REPLICATION SLAVE 許可權的使用者

master_password='xxxxxxxx',      # 該使用者的密碼

master_log_file='mysql-bin.000xxx',  # 已在匯入時指定了

master_log_pos=xxxxxx;       # 已在匯入時指定了

start slave;

 

例子:

master_log_file和master_log_pos透過在主庫上使用命令獲得:

show master status \G;

在從庫上執行:

change master  to

master_host='192.168.159.128',

master_port=3306,

master_user='repl_user',

master_password='123456',

master_log_file='mysql-bin.000001',

master_log_pos=1071;

start  slave;

 

二、主從複製狀態檢查及異常處理


1、MYSQL啟動報錯

(1) MYSQL啟動時報錯:

Another MySQL daemon already running with the same unix socket


原因多個Mysql程式使用了同一個socket。

兩個方法解決:

第一個是立即關機 使用命令 shutdown -h now 關機,關機後在啟動,程式就停止了。

第二個直接把mysql.sock檔案改名即可。也可以刪除,推薦改名。

然後就可以啟動mysql了。

(2) 在REDHAT7.0版本安裝MYSQL5.6.38時遇到以下啟動報錯
service mysql start
Starting MySQL.180424 22:21:31 mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
 ERROR! The server quit without updating PID file (/var/lib/mysql/REDHAT70.pid).



解決方法:
mkdir -p /var/log/mariadb/
cd /var/log/mariadb/
touch mariadb.log
chmod -R 775 mariadb.log
chown -R mysql:mysql mariadb.log


 

2、ERROR-2013報錯

ERROR-2013報錯程式碼,可能造成的原因是

[ERROR] Slave I/O: error connecting to master 'repl_user@192.168.159.128:3306' - retry-time: 60  retries: 86400, Error_code: 2013


iptables -F

setenforce 0

 

 

3、ERROR-1045報錯

Last_IO_Errno: 1045

Last_IO_Error: error connecting to master 'repl_user@192.168.159.128:3306' - retry-time: 60  retries: 86400


必須使用以下方法授權

select password('123456');


GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';


4、登陸MYSQL報錯ERROR-2002

登陸MYSQL時如果報錯:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'

 解決方法:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock


--未完待續
原本只是想自己寫個小總結,自己記錄下,沒想到會被推薦,有時間就上來編輯修改下,儘量完善

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-2152860/,如需轉載,請註明出處,否則將追究法律責任。

相關文章