centos7搭建mysql-5.7.22主從復制


mysql7.7.22主從復制

         本項目是根據真實環境搭建編寫出文檔,文檔中的目錄也是根據自己公司環境所創建。公司原來是一台服務器搭建的數據庫(5.7.22),由於業務的擴展需要搭建一台從服務器,減輕主服務器的壓力。兩台服務器的數據庫搭建方法是一樣的,就是主從配置時候不一樣。

一、  系統版本及安裝所需要的環境

系統:Centos7.1兩台

Master:192.168.161.141

Slave: 192.168.161.140

安裝開發工具,如果你源碼安裝軟件就需要安裝這個。

yum -y groupinstall "Development Tools"

安裝依賴包

yum -y install openssl* zlib* pcre* ncurses* make cmake vsftpd lrzsz gcc gcc-c++ gcc-g77 flex bison* autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel net-snmp-devel curl-devel perl-DBI vixie-cron crontabs wget

檢查是否已經有安裝的mysql,避免沖突。

rpm -qa | grep mysql 

如果系統已安裝mysql,進行強制卸載。

rpm -e –nodeps mysql-libs-5.1.73-5.el6_6.x86_64

centos7默認安裝了mariadb數據庫,將其查詢出來卸載掉

rpm –qa  | grep  mariadb

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

創建數據庫用戶組,並將用戶加入mysql組。

groupadd mysqlmaster

useradd -g mysqlmaster -m mysqlmaster    ###mysqlmaster這個用戶自己定,這邊原服務器設置的是mysqlmaster。

一、  進行安裝數據庫。

下載地址:

https://dev.mysql.com/downloads/mysql/5.7.html#downloads

下載好后使用lrzsz工具軟件上傳至服務器opt目錄下。###不會使用lrzsz工具的可以百度。

解壓上傳的軟件包,MySQL5.7.5之后需要boost庫支持。

安裝ncurses-develncurses字符終端下屏幕控制的基本庫,你在TTY下登錄到主機上mysql需要的,所以依賴。

yum –y install ncurses-devel

安裝cmake,編譯過程檢查(mysql5.6版本以上需要用cmake安裝,這是必須的,其他軟件也可以使用cmake安裝但是使用cmake安裝的前提是源碼包下有沒有CMakeLists.txt這個文件,有的話就可以使用cmake .)    ####yum安裝依賴的時候,安裝了cmake,yum安裝的版本太低,百度下載一個高版本的安裝。

進行解壓安裝cmake。

執行cmake腳本。

使用gmake進行編譯安裝。

刪除CMakeCache.txt,不然安裝mysql時報錯:remove CMakeCache.txt and rerun cmake……

使用find / -name CMakeCache.txt將CMakeCache.txt查詢出來刪除

刪除CMakeCache.txt

創建mysql所需要的文件夾

設置目錄屬組

mkdir/home/mysqlmdata/    ###此目錄用於存放bin-log日志

chmod 755 –R /home/mysqlmdata/

chown –R mysqlmaster:mysqlmaster /home/mysqlmdata/  

chmod 755 –R /opt/mysqlmaster/mysqlm/   ####配置文件目錄設置權限

chown –R mysqlmaster:mysqlmaster /opt/mysqlmaster/mysqlm/    

chmod 755 /home/mysqlm/data      #####此目錄用於存放數據的目錄。

chown -R mysqlmaster:mysqlmaster /home/mysqlm/data

進行預編譯安裝

cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysqlmaster/mysqlm -DMYSQL_UNIX_ADDR=/opt/mysqlmaster/mysqlm/mysql_3306.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/mysqlm/data -DMYSQL_USER=mysqlmaster -DMYSQL_TCP_PORT=3306 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/opt/mysql-5.7.22/boost/boost_1_59_0/ -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_READLINE=ON -DSYSCONFDIR=/opt/mysqlmaster/mysqlm -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT='huiteng for mysqlm'

編譯安裝,此步驟時間有點長。

測試一下,如果返回不為0,則未完成。

創建mysql配置文件my.cnf

vim my.cnf

(master:)

[client]

#password       = your_password

port            = 3306

socket          = /opt/mysqlmaster/mysqlm/mysql_3306.sock

default-character-set=UTF8

# The MySQL server

[mysqld]

port            = 3306

basedir = /opt/mysqlmaster/mysqlm/

socket          = /opt/mysqlmaster/mysqlm/mysql_3306.sock

datadir         = /home/mysqlm/data

log-error=/home/mysqlm/data/error.log

pid-file=/home/mysqlm/data/mysql.pid

user=mysqlmaster #此處為mysql源碼安裝的系統用戶名

tmpdir=/tmp

log_timestamps = SYSTEM

#explicit_defaults_for_timestamp=1

skip-name-resolve

skip-external-locking

lower_case_table_names=1

server_id=1

binlog_format = row

log_bin_trust_function_creators = 1

log_bin    = /home/mysqlmdata/mysql-bin

log-slave-updates

binlog-do-db=htcoredb

binlog-do-db=htcoretestdb

binlog-ignore-db = mysql

key_buffer_size = 4024M

max_allowed_packet = 256M

max_heap_table_size=256M

tmp_table_size =256M

sort_buffer_size = 128K

read_buffer_size = 4M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 64

query_cache_size= 64M

user = mysqlmaster

max_connections=214

max_connect_errors=1024

table_open_cache = 400

expire_logs_days=10

innodb_buffer_pool_size=2G

innodb_file_per_table=1

innodb_log_buffer_size = 32M

innodb_open_files = 800

sync_binlog=0

# 打開慢查詢日志功能

slow_query_log = 1

# 超過2秒的查詢記錄下來

long_query_time = 2

# 記錄下沒有使用索引的查詢

log_queries_not_using_indexes = 0

slow_query_log_file =/home/mysqlm/data/log/slowquery.log

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

[isamchk]

key_buffer_size = 128M

sort_buffer_size = 128K

[myisamchk]

key_buffer = 128M

sort_buffer_size = 128K

[mysqlhotcopy]

interactive_timeout

設置my.cnf讀寫執行權限

chmod 777my.cnf

chown  mysqlmaster:mysqlmaster my.cnf

將mysql的庫文件路徑及輸出mysql的頭文件加入系統的庫文件搜索路徑中.注: 此處只需將一個mysql實例的庫文件添加到系統庫,無需多次添加。

ln -s /opt/mysqlmaster/mysqlm/lib/mysql /usr/lib/mysql

ln -s /opt/mysqlmaster/mysqlm/include/mysql /usr/include/mysql

進入相應實例的安裝路徑,初始化各自配置腳本

如果指定的data目錄不為空,需要刪除並重新創建及賦予777權限

初始化數據庫

bin/mysqld --initialize --user=mysqlmaster --basedir=/opt/mysqlmaster/mysqlm --datadir=/home/mysqlm/data/ --tmpdir=/tmp

如果沒有上圖,可以使用,echo  $?   如果返回為0,證明初始化成功。密碼的話在err.log日志去查找。

查看/home/mysqlm/data/err.log

復制啟動腳本到系統服務

cp /opt/mysqlmaster/mysqlm/support-files/mysql.server /etc/init.d/mysqlmaster

創建log目錄,因為初始化數據庫時候data不允許有任何文件,所以只能等初始化完畢后在創建。

Mkdir –p /home/mysqlm/data/log/

Chmod 755 –R /home/mysqlm/data/log/

Chown –R mysqlmaster:mysqlmaster /home/mysqlm/data/log/

修改啟動腳本。

Vim /etc/init.d/mysqlmaster

先關閉再啟動

$cd /opt/mysqlmaster/mysqlm

$bin/mysqld stop

(mysqlmaster實例啟動)

/etc/init.d/mysqlmaster start

如果啟動失敗,查看錯誤日志。

cd /opt/mysqlmaster/mysqlm/bin

./mysql -u root -p    ###密碼是初始化數據庫時候的密碼。

進去以后可以修改密碼。

set password for root@localhost=password(‘123456’)

####5.7.22如果忘記密碼,則可以使用以下操作。

####進入my.cnf跳過密碼登陸

####在[mysqld]里面添加skip-grant-tables

####在進行登陸的時候回車跳過密碼

####登陸成功后切換至mysql數據庫

####Use mysql

####給root授權密碼

####update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

####刷新密碼

####flush privileges;

####quit退出

####關閉數據庫找到my.cnf去掉skip-grant-tables

####去掉后啟動數據庫。使用剛剛設置的密碼123456登陸數據庫。

 二、主從復制配置

從服務器在另一台服務器安裝,安裝方法一樣。

配置主從

修改my.cnf,master主服務器配置。

Server-id,master務器不能跟slave服務器的id一樣。

Bin-log日志的路徑指定,要有寫入權限。

修改my.cnf,slave從服務器配置。

在主庫(master)中創建一個用戶用於與從庫同步的用戶名和密碼(這里我創建一個slave_user用戶,密碼為123456),並給slave_user用戶授權,以用於主庫操作從庫。

192.168.161.141(主庫master)

192.168.161.140(從庫slave)

create user 'slave_user'@'192.168.161.140' identified by '123.COM!';

grant replication slave on *.* to 'slave_user'@'192.168.161.140';

flush privileges;

查看用戶是否創建成功。

mysql> sele,host from mysql.user;

查看master的狀態。

show master status;

這里的mysql-bin.000026,和Position值154,slave配置的時候會用到。

在master創建幾個庫做測試。

create database htjk;

use htjk

create table test(id int,name varchar(50));

insert into test (id,name) values(1,'lisi');

導出數據。     

直接輸入命令mysqldump會發現提示命令不存在,是由於系統默認會查找/usr/bin下的命令,如果這個命令不在這個目錄下,自然會找不到命令,並報錯。知道了問題的所在,就直接去處理,先用一條find命令查找mysqldump的所載路徑。

find  / -name mysqldump

然后再用ln命令鏈接到/usr/bin下面。

ln -fs /opt/mysqlmaster/mysqlm/bin/mysqldump /usr/bin

mysqldump -u root -p --all-databases --master-data >/root/all.sql

查看所導出的數據。

將數據發送到到slave服務器上面,使數據保持一致。

scp all.sql root@192.168.161.140:/tmp

在slave服務器導入master數據。

./mysql -uroot -p < /tmp/all.sql

導入數據成功后查詢數據是否正確。

slave> reset slave all   #重新change master to

mysql> change master to

    -> master_host='192.168.161.141',

    -> master_user='slave_user',

    -> master_password='123.COM!',

    -> master_log_file='mysql-bin.000026',

    -> master_log_pos=154,

    -> MASTER_CONNECT_RETRY=10;

 ##關於MASTER_CONNECT_RETRY,在主服務器宕機的情況下,從服務器線程重新嘗試連接主服務器之前睡眠的秒數。如果主服務器.Info文件中的值可以讀取則優先使用,如果未設置,默認為60秒。

 

啟動slave

start slave;  

##關閉命令stop slave

##重啟命令reset slave

查看slave的狀態。

show slave status \G

只要Slave_IO_Running: Yes, Slave_SQL_Running: Yes,主從就搭建成功。若其中一項不為yes,查看mysql的錯誤日志。

##測試出現問題

Slave_IO_Running: Yes, Slave_SQL_Running: Yes,都為yes,但是數據不同步。

是因為主數據庫的my.cnf配置文件,只指定了需要同步的庫導致的。

Binlog-do-db=dbname ##

Binlog-ignore-db=mysql #

根據自己公司情況而定,是需要全部同步,還是要只指定的庫進行同步。

主從同步配置。

binlog-ignore-db = mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

主從配置完成,你可以想同步哪個數據庫就可以同步哪個數據庫。

可能不是特別仔細的文檔,需要理解的去搭建數據庫,如有問題,請多多指教。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM