1. 程式人生 > >主主CMAKE編譯Mysql-5.7.18的安裝

主主CMAKE編譯Mysql-5.7.18的安裝

linux 7.2 下先安裝當前的包 mysql-5.1.18的安裝

先解除安裝mariadb資料庫
#rpm -qa|grep mariadb
#rpm -e --nodeps mariadb-libs ,server,client
bison安裝包,libaio安裝包,gcc-c安裝包,ncurses-devel安裝包 c* gc*
boost這個包。
yum -y install bison* libaio* gcc* ncurses* c* boost*
建立使用者以及目錄
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql --此乃mysql官網說明

groupadd -g 701 mysql

useradd -M -g mysql -u 1101 -s /sbin/nologin mysql #建立mysql賬號,-u是使用者號,-M不建立家目錄,-s自動以shell為/sbin/nologin賬號不能登入

mysql軟體目錄: /data/mysql/installdir
mysql資料目錄:/data/mysql/datadir/3306/data
mysql日誌目錄:/data/mysql/logdir/3306/{bin_log,general_log,error_log,query_log}

mkdir -p /data/mysql/installdir
mkdir -p /data/mysql/datadir/3306/data
mkdir -p /data/mysql/logdir/3306/{bin_log,general_log,error_log,query_log}
mkdir -p /data/mysql/logdir/3306/relay_log ----若要主主的時候會用到
mkdir -p /data/mysql/tmpdir
mkdir -p /data/mysql/src
cd /data
chown -R mysql:mysql mysql/

安裝cmake安裝包
#cd mysql
#tar -zxvf cmake-3.11.1.tar.gz
#cd cmake-3.11.1
#./configure
#gmake && gmake install
#echo $? 可以檢視是否有錯誤
安裝mysql安裝包
#cp mysql-5.7.18.tar.gz /data/mysql/src
#tar -zxvf mysql-5.7.18.tar.gz
#cd mysql-5.7.18
#cmake . -DCMAKE_INSTALL_PREFIX=/data/mysql/installdir
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DENABLED_LOCAL_INFILE=ON
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
-DWITH_READLINE=ON
-DDOWNLOAD_BOOST=1
-DWITH_BOOST=/usr/local/boost
-DSYSCONFDIR=/data/mysql/datadir/3306/data
-DMYSQL_UNIX_ADDR=/data/mysql/datadir/3306/data/mysql.sock

-DCOMPILATION_COMMENT=‘MySQL Master’\ ## [有時候增加後,會出現The source directory “/mysql/mysql-5.1.18/master” does not exist 的錯誤,去掉以後就好了 ]
需要安裝: 一下安裝是為了支援readline 庫
yum install readline-devel -y
如果出現boost的錯誤,就需要安裝以下的包
boost這個包

#cd /usr/local/boost
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

make && make install

編輯mysql,的my.cnf
vi /etc/my.cnf
[client]
port=3306
socket=/data/mysql/datadir/3306/data/mysql.sock

[mysqld]
port=3306
user=mysql
socket=/data/mysql/datadir/3306/data/mysql.sock
pid-file=/data/mysql/datadir/3306/data/mysql.pid
basedir=/data/mysql/installdir
datadir=/data/mysql/datadir/3306/data
tmpdir=/data/mysql/tmpdir
log_error=/data/mysql/logdir/3306/error_log/mysql3.err
server-id = 2
log_bin = /data/mysql/logdir/3306/bin_log/binlog
general_log_file=/data/mysql/logdir/3306/general_log
general_log = 1
slow_query_log = ON
long_query_time = 2
slow_query_log_file = /data/mysql/logdir/3306/query_log
log_queries_not_using_indexes = ON
binlog-ignore-db=mysql
binlog_cache_size=512M
binlog_format=mixed
expire_logs_days=0
slave_skip_errors=1062
relay_log= /data/mysql/logdir
log_slave_updates=1
auto_increment_increment=2
auto_increment_offset=2

###########################################################################################################
[client]
port=3306
socket=/data/mysql/datadir/3306/data/mysql.sock

[mysqld]
port=3306
user=mysql
socket=/data/mysql/datadir/3306/data/mysql.sock
pid-file=/data/mysql/datadir/3306/data/mysql.pid
basedir=/data/mysql/installdir
datadir=/data/mysql/datadir/3306/data
tmpdir=/data/mysql/tmpdir

log_error=/data/mysql/logdir/3306/error_log/mysql3.err

server-id = 1
log_bin = /data/mysql/logdir/3306/bin_log/binlog

general_log_file=/data/mysql/logdir/3306/general_log
general_log = 1

slow_query_log = ON
long_query_time = 2
slow_query_log_file = /data/mysql/logdir/3306/query_log
log_queries_not_using_indexes = ON
binlog-ignore-db=mysql
binlog_cache_size=512M
binlog_format=mixed
expire_logs_days=0
slave_skip_errors=1062
relay_log= /data/mysql/logdir
log_slave_updates=1
auto_increment_increment=2
auto_increment_offset=1
explicit_defaults_for_timestamp=true

#Master config#
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=0
slave_skip_errors=1062
relay_log=/data/mysql/logdir/3306/relay_log
log_slave_updates=1

#GTID USING#
###########################################################################################################

初始化資料庫
cd /data/mysql/installdir/bin
./mysqld --initialize --user=mysql --basedir=/data/mysql/installdir --datadir=/data/mysql/datadir/3306/data

啟動資料庫
./mysqld_safe --defaults-file=/etc/my.cnf &

或者
cp /data/mysql/installdir/support-files/mysql.server /etc/init.d/mysqld

/etc/init.d/mysqld start
/etc/init.d/mysqld stop

建立全域性mysql命令環境
echo ‘export PATH=/data/mysql/installdir/bin:$PATH’ >>/etc/profile
source /etc/profile

配置mysql密碼
/etc/init.d/mysqld stop
mysqld_safe --skip-grant-tables &
mysql
mysql>update mysql.user set authentication_string=password(‘[email protected]’); where user=‘root’;
select host,user,authentication_string from mysql.user;
mysql>flush privileges;

/etc/init.d/mysqld restart
mysql -u -p
mysql>set password=password(‘[email protected]’); --由於前面更改不完全,需要重新進行一次密碼更改。然後才能執行其它的mysql命令

主主配置

Master A 引數檔案配置,增加如下行
########################################縮減後的結果#################
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=0
slave_skip_errors=1062
relay_log=/data/mysql/logdir/3306/relay_log
log_slave_updates=1
########################################如上述結果#################

#vim /etc/my.cnf
[mysqld]
[mysqld]

伺服器的ID,必須唯一,一般設定自己的IP

server_id=1

複製過濾:不需要備份的資料庫(MySQL庫一般不同步)

binlog-ignore-db=mysql

開啟二進位制日誌功能,名字可以隨便取,最好有含義(比如專案名)

log-bin=日誌路徑

為每個 session 分配的記憶體,在事務過程中用來儲存二進位制日誌的快取

binlog_cache_size=1M

主從複製的格式(mixed,statement,row,預設格式是 statement)

binlog_format=mixed

二進位制日誌自動刪除/過期的天數。預設值為 0,表示不自動刪除。

expire_logs_days=0

跳過主從複製中遇到的所有錯誤或指定型別的錯誤,避免 slave 端複製中斷。

如:1062 錯誤是指一些主鍵重複,1032 錯誤是因為主從資料庫資料不一致

slave_skip_errors=1062

作為從伺服器時的中繼日誌

relay_log=中繼日誌的位置或名稱,預設是在資料目錄下

log_slave_updates 表示 slave 將複製事件寫進自己的二進位制日誌

log_slave_updates=1

主鍵自增規則,避免主從同步ID重複的問題

auto_increment_increment=2 # 自增因子(每次加2)
auto_increment_offset=1 # 自增偏移(從1開始),單數

Master A 資料庫配置
#/etc/init.d/mysqld restart
#mysql -uroot -p
mysql>stop slave;
mysql>grant replication slave,replication client on . to ‘rep1’@‘10.60.10.71’ identified by ‘[email protected]’; ###讓對方來讀取我的日誌
mysql>flush privileges;
mysql>show master status\G;
獲取當前的binlog日誌名稱,以及position位置點

然後在Master B 資料庫上面配置
#mysql -uroot -p
mysql>stop slave;
mysql>change master to
master_host=‘10.60.11.2’,
master_user=‘repl’,
master_password='[email protected] ',
master_log_file=‘binlog.000022’,
master_log_pos=1177,
master_connect_retry=30,
master_port=3306;
mysql> start slave;

Master B 資料庫的配置
/etc/init.d/mysqld restart
#mysql -uroot -p
mysql>grant replication slave,replication client on . to ‘rep1’@‘10.60.11.2’ identified by ‘[email protected]’; ###讓對方來讀取我的日誌
mysql>flush privileges;
mysql>show master status\G;

Master A 資料庫的配置
#mysql -uroot -p
mysql>stop slave;
mysql>change master to
master_host=‘10.60.11.4’,
master_user=‘repl’,
master_password='[email protected] ',
master_log_file=‘binlog.000022’,
master_log_pos=1177,
master_connect_retry=30,
master_port=3306;
mysql> start slave;

Master B 引數檔案配置,增加如下行

server_id=2
binlog-ignore-db=mysql
log-bin=路徑
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=0
slave_skip_errors=1062
relay_log=路徑
log_slave_updates=1
#ID自增從2開始,雙數
auto_increment_increment=2
auto_increment_offset=2

如果停止stop slave 的過程中遇到
> stop slave;
ERROR 1192 (HY000): Can’t execute the given command because you have active locked tables or an active transaction的錯誤

unlock tables

然後再重新stop slave

檢視作為從節點的狀態資訊

mysql> show slave status\G;

Master A 跟 Master B 執行如下

#mysql -uroot -p
mysql>start slave;
mysql>show slave status\G;
注意:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes

################my.cnf的配置檔案如下#################
[client]
port=3306
socket=/data/mysql/datadir/3306/data/mysql.sock

[mysqld]
port=3306
user=mysql
socket=/data/mysql/datadir/3306/data/mysql.sock
pid-file=/data/mysql/datadir/3306/data/mysql.pid
basedir=/data/mysql/installdir
datadir=/data/mysql/datadir/3306/data
tmpdir=/data/mysql/tmpdir
log_error=/data/mysql/logdir/3306/error_log/mysql3.err
server-id = 2
log_bin = /data/mysql/logdir/3306/bin_log/binlog

general_log_file=/data/mysql/logdir/3306/general_log
general_log = 1
slow_query_log = ON
long_query_time = 2
slow_query_log_file = /data/mysql/logdir/3306/query_log
log_queries_not_using_indexes = ON
binlog-ignore-db=mysql
binlog_cache_size=512M
binlog_format=mixed
expire_logs_days=0
slave_skip_errors=1062
#relay_log= /data/mysql/logdir
log_slave_updates=1
auto_increment_increment=2
auto_increment_offset=2
explicit_defaults_for_timestamp=true

#Master config
#binlog-ignore-db=mysql
#binlog_cache_size=1M
#binlog_format=mixed
#expire_logs_days=0
#slave_skip_errors=1062
relay_log=/data/mysql/logdir/3306/relay_log
#log_slave_updates=1
skip-host-cache
skip-name-resolve=1
#relay-log-index=slave-relay-bin.index
#relay-log=slave-relay-bin

##############MYSQL GTID的開啟###############
1,確保error log沒有錯誤,且驗證是否可以開啟gtid|每臺伺服器都需要進行執行
set @@global.enforce_gtid_consistency=warn;

2,在每一臺server上執行
set @@global.enforce_gtid_consistency=on;

3, 在每一臺server上執行
set @@global.gtid_mode=off_permissive;

4,每一臺server 執行,執行順序沒有先後之分,要保證下一步操作之前,上面的操作都已在所有server上執行過
set @@global.gtid_mode=on_permissive;

5,保證每一臺ongoing_anonymous_transaction_count狀態值為零
show status like ‘ongoing_anonymous_transaction_count’;

6,確保沒有任何操作事務在進行
mysql> SET @@global.read_only = ON;
7,設定gtid_mode=on在my.cnf檔案中
gtid_mode=on
enforce_gtid_consistency=on

8, 執行如下操作如下
set @@global.gtid_mode=on;

9,stop slave

10, 重啟每臺伺服器

11,執行如下語句(主主的都要進行執行)
stop slave;
change master to master_auto_position=1 ;
start slave;

12 ,如果新建立的情況下,則此步需要另外加引數,如同主主配置。

###########如何關閉GTID MODE#################
stop slave;
change master to master_auto_position=0,master_log_file=‘mysql-bin.000383’,master_log_pos= 245710922 ;
binlog日誌選擇沒有的日誌號
pos 選擇一個很大的位置號
start slave;

以下每條語句都需要在每個伺服器上執行完成後,然後執行下一條
set @@global.gtid_mode=on_permissive;
set @@global.gtid_mode=off_permissive;
select @@global.gtid_owned;
set @@global.gtid_mode=off;

然後在my.cnf裡面
gtid_mode=off
################################################

以上開啟GTID MODE 的模式可以省略一些步驟,不過最好都執行。