国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL5.6.40源碼安裝 主從搭建 主主搭建

2024-07-24 12:31:49
字體:
來源:轉載
供稿:網友
        前面那篇5.6.38主從搭建的文章屬于測試系統里面弄著玩的,以下這篇文章寫的是在公司生產庫上搭建的MYSQL主從。
        在上系統前,糾結了很久,到底使用哪種數據庫(PG?HBASE?MONGODB?)?最后選擇了MYSQL是由于公司懂的人多,自己也比較熟悉,且新項目初期數據量不大,MYSQL可以滿足需求,最最重要的是這個新項目屬于探路性質的,如果真的被重視起來,那到時再把數據遷移出去就好了(基于開發說的數據結構簡單單一,存儲數據單一的情況,沒有特別的數據類型等)。
       所以最終選擇了開源數據庫中的一員MYSQL。(本來還有考慮ORACLE的,老本行,只不過考慮到領導們支持開源,那就用開源吧)
 
        之前也糾結了要不要使用mysql5.7.22,結果去下載了安裝,發現redhat6.5的cmake版本太低,不支持mysql5.7.22的編譯,一下子又沒找到redhat7的安裝包,干脆就用mysql5.6.40這個5.6的最終穩定版算了。
 
      操作系統,網卡,防火墻,IP地址配置等等在這里就不寫了。 一、MYSQL源碼安裝
(兩個節點都安裝,步驟一樣的)
      安裝環境:
操作系統REDHAT6.5
 
NODE1 主機名 master      IP地址 192.168.159.148
 
NODE2 主機名 slave       IP地址 192.168.159.149
  
1、安裝依賴
yum -y install make gcc-c++ cmake bison-devel  ncurses-devel perl
2、創建用戶和組
groupadd mysql
useradd mysql -g mysql -M -s /sbin/nologin
3、下載5.6.40源碼包
https://downloads.mysql.com/archives/get/file/mysql-5.6.40.tar.gz
4、解壓tar -zxvf mysql-5.6.40.tar.gz
 
cd /opt/
 
tar -zxvf mysql-5.6.40.tar.gz
 
cd  mysql-5.6.40
 
5、編譯安裝
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc-DWITH_MYISAM_STORAGE_ENGINE=1-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_MEMORY_STORAGE_ENGINE=1-DWITH_READLINE=1-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DMYSQL_TCP_PORT=3306-DENABLED_LOCAL_INFILE=1-DWITH_PARTITION_STORAGE_ENGINE=1-DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
說明:
設置安裝目錄
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
數據庫存放目錄
-DMYSQL_DATADIR=/usr/local/mysql/data
系統配置目錄
-DSYSCONFDIR=/etc
安裝 myisam 存儲引擎
 
-DWITH_MYISAM_STORAGE_ENGINE=1
安裝 innodb 存儲引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1
安裝memory存儲引擎
-DWITH_MEMORY_STORAGE_ENGINE=1
快捷鍵功能
-DWITH_READLINE=1
Unix socket文件路徑
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
MySQL 監聽端口
-DMYSQL_TCP_PORT=3306
允許從本地導入數據
-DENABLED_LOCAL_INFILE=1
安裝數據庫分區
-DWITH_PARTITION_STORAGE_ENGINE=1
安裝所有擴展字符集
-DEXTRA_CHARSETS=all
使用 utf8 字符
-DDEFAULT_CHARSET=utf8
校驗字符
-DDEFAULT_COLLATION=utf8_general_ci
支持 SSL
-DWITH_SSL=yes
 
make &&make install
 
6、目錄授權
chown mysql.mysql /usr/local/mysql
mkdir /usr/local/mysql/log
chown mysql.mysql /usr/local/mysql/log
7、數據庫初始化
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
8、配置環境變量
vi /root/.bash_profile 在最后一行添加
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
 
二、MYSQL5.6.40主從搭建
 
1、Master端配置部署
a、在主服務器上的my.cnf配置文件中的[mysqld]節點下添加以下配置
vi /etc/my.cnf
 
[mysqld]
 
server-id=101
default-storage-engine=InnoDB
lower_case_table_names=1
log-bin=/usr/local/mysql/log/mysql-bin.log
log-bin-index=/usr/local/mysql/log/mysql-bin.index
expire_logs_days=30
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/usr/local/mysql/data/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
 
 
說明:
 
log-bin :給出二進制日志的所有文件基礎名
 
log-bin-index :給出二進制日志文件的文件名,通常以000001開始,順序遞增。全名:master-bin.000001
 
server-id :mysql服務器唯一ID,在主從復制的所有服務器中必須唯一。
 
 
啟動數據庫
傳統啟動方式
/usr/local/mysql/bin/mysqld_safe --user=mysql &
制作成服務啟動
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
查看啟動是否成功
netstat -tnl|grep 3306
ps -ef|grep mysql
相關命令
service mysql start
停止mysql服務
service mysql stop
重啟mysql服務
service mysql restart
添加到開機啟動項
chkconfig --add mysql
 
b、創建用戶,并賦予權限:
登陸數據庫時報錯
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2)
 
ln -s /tmp/mysql.sock  /tmp/mysqld.sock
 
登陸
mysql -uroot
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
default-storage-engine=InnoDB
lower_case_table_names=1
log-bin=/usr/local/mysql/log/mysql-bin.log
log-bin-index=/usr/local/mysql/log/mysql-bin.index
expire_logs_days=30
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
[mysqld_safe]
log-error=/usr/local/mysql/data/mysqld.log
pid-file=/usr/local/mysql/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信息。
  
例子:
 
mysqldump -uroot --events --all-databases > /opt/mysql.dump
  
3.2、從庫導入數據
mysql -u*** -p*** --default-character-set=utf8< all_database.sql
  
例子:
 
mysql -uroot -p*** <  /opt/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.148',
 
master_port=3306,
 
master_user='repl_user',
 
master_password='123456',
 
master_log_file='mysql-bin.000002',
 
master_log_pos=415;
 
start slave;
  
驗證主從是否搭建成功在從庫執行
show slave status /G
在主庫創建一個表
use test
create table aa (name char(10));
insert into aa values('Tom');
在從庫查詢
use test
select * from aa;
查到剛剛插入的數據就O了
 
修改root密碼
cd /usr/local/ mysql /bin
 
./mysqladmin -u root password
 
mysql> use mysql;
mysql> desc user;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root"; //授權遠程連接
mysql> update user set Password = password('123456') where User='root'; //設置root用戶密碼
mysql> select Host,User,Password from user where User='root';
mysql> flush privileges;
mysql> exit
二、MYSQL5.6.40主主搭建
前面的安裝配置都一樣,只需要配置/etc/my.cnf
 
1、主庫A配置(192.168.159.148)
vi /etc/my.cnf
[client]
port = 3306 socket = /tmp/mysql.sock
[mysqld]
basedir = /usr/local/mysql
port = 3306 socket = /tmp/mysql.sock
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
log-error = /usr/local/mysql/data/mysql.err
server-id = 1 auto_increment_offset = 1 auto_increment_increment = 2 #奇數ID
log-bin = mysql-bin                                                     #打開二進制功能,MASTER主服務器必須打開此項
binlog-format=ROW
#binlog-row-p_w_picpath=minimal  #這個參數不知道為何會報錯
log-slave-updates=true gtid-mode=on
enforce-gtid-consistency=true master-info-repository=TABLE
relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-workers=0 sync_binlog=0 binlog-checksum=CRC32
master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 #expire_logs_days=5 max_binlog_size=1024M                                                   #binlog單文件最大值
replicate-ignore-db = mysql                                             #忽略不同步主從的數據庫
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test
replicate-ignore-db = zabbix
max_connections = 3000 max_connect_errors = 30 skip-character-set-client-handshake                                     #忽略應用程序想要設置的其他字符集
init-connect='SET NAMES utf8' #連接時執行的SQL
character-set-server=utf8                                               #服務端默認字符集
wait_timeout=1800 #請求的最大連接時間
interactive_timeout=1800 #和上一參數同時修改才會生效
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES                     #sql模式
max_allowed_packet = 10M
bulk_insert_buffer_size = 8M
query_cache_type = 1 query_cache_size = 128M
query_cache_limit = 4M
key_buffer_size = 256M
read_buffer_size = 16K
skip-name-resolve
slow_query_log=1 long_query_time = 6 slow_query_log_file=slow-query.log
innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
[mysqldump]
quick
max_allowed_packet = 16M
[mysqld_safe]
 
 
2、主庫B配置(192.168.159.149)
vi /etc/my.cnf
 
[client]
port = 3306 socket = /tmp/mysql.sock
[mysqld]
basedir = /usr/local/mysql
port = 3306 socket = /tmp/mysql.sock
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
log-error = /usr/local/mysql/data/mysql.err
server-id = 2 auto_increment_offset = 2 auto_increment_increment = 2 #偶數ID
log-bin = mysql-bin                                                     #打開二進制功能,MASTER主服務器必須打開此項
binlog-format=ROW
#binlog-row-p_w_picpath=minimal #這個參數不知道為何會報錯 log-slave-updates=true gtid-mode=on
enforce-gtid-consistency=true master-info-repository=TABLE
relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-workers=0 sync_binlog=0 binlog-checksum=CRC32
master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 #expire_logs_days=5 max_binlog_size=1024M                                                   #binlog單文件最大值
replicate-ignore-db = mysql                                             #忽略不同步主從的數據庫
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test
replicate-ignore-db = zabbix
max_connections = 3000 max_connect_errors = 30 skip-character-set-client-handshake                                     #忽略應用程序想要設置的其他字符集
init-connect='SET NAMES utf8' #連接時執行的SQL
character-set-server=utf8                                               #服務端默認字符集
wait_timeout=1800 #請求的最大連接時間
interactive_timeout=1800 #和上一參數同時修改才會生效
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES                     #sql模式
max_allowed_packet = 10M
bulk_insert_buffer_size = 8M
query_cache_type = 1 query_cache_size = 128M
query_cache_limit = 4M
key_buffer_size = 256M
read_buffer_size = 16K
skip-name-resolve
slow_query_log=1 long_query_time = 6 slow_query_log_file=slow-query.log
innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
[mysqldump]
quick
max_allowed_packet = 16M
[mysqld_safe]
3、主庫A(192.168.159.148)創建同步用戶
mysql> grant replication slave on *.* to 'repl'@'192.168.159.149' identified by '123456';
mysql> flush privileges;
 
4、主庫B(192.168.159.149) 創建同步用戶
 
mysql> grant replication slave on *.* to 'repl'@'192.168.159.148' identified by '123456';
mysql> flush privileges;
 
5、 主庫A(192.168.159.148 ) 配置同步信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                   |
+------------------+----------+--------------+------------------+-------------------------------------------------------------------------------------+
| mysql-bin.000003 |     2552 |              |                  | 7b0fba4f-5cd4-11e8-bada-000c29ba59e8:1-20,
a1788b59-5d6a-11e8-bead-000c295d547a:3-9 |
+------------------+----------+--------------+------------------+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> change master to master_host='192.168.159.149',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=1727;
 
mysql > start slave;
 
mysql> show slave status /G;
注意看其中的這兩個狀態是YES就是正常
 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
  
6、 主庫A(192.168.159.149 ) 配置同步信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------------------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                         |
+------------------+----------+--------------+------------------+-------------------------------------------------------------------------------------------+
| mysql-bin.000004 |     1727 |              |                  | 7b0fba4f-5cd4-11e8-bada-000c29ba59e8:8-10:16-20,
a1788b59-5d6a-11e8-bead-000c295d547a:1-9 |
+------------------+----------+--------------+------------------+-------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)
 
mysql> change master to master_host='192.168.159.148',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=2552;
 
mysql > start slave;
 
mysql > show slave status /G;
注意看其中的這兩個狀態是YES就是正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
7、檢測主主同步
可以在A庫創建一個database 然后在B庫看是否同步,再去B庫創建一個database然后在A庫看是否同步。
注意事項:
mysql異常宕機情況下,如果未設置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出現binlog或者relaylog文件出現損壞,導致主從不一致。
 
--未完待續
 
8、MYSQL啟動報錯
 
(1) 報錯現象:
 
[root@node1 mysql]# service mysql start
 
Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/mysql/node1.pid).
 
查看報錯日志:
 
[root@node1 mysql]# tail  /var/log/mysqld.log
 
190512 19:59:10  InnoDB: Starting an apply batch of log records to the database...
 
InnoDB: Progress in percents: 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 
InnoDB: Apply batch completed
 
190512 19:59:10  InnoDB: Waiting for the background threads to start
 
190512 19:59:11 InnoDB: 5.5.40 started; log sequence number 1595675
 
190512 19:59:11 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
 
190512 19:59:11 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
 
190512 19:59:11 [Note] Server socket created on IP: '0.0.0.0'.
 
190512 19:59:11 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
 
190512 19:59:11 mysqld_safe mysqld from pid file /var/lib/mysql/node1.pid ended
  
     解決方法:
 
查看配置文件,發現配置文件中datadir目錄是默認的,需要修改成自己設置的/usr/local/mysql/data/
 
[root@node1 mysql]# cat /etc/my.cnf
 
[mysqld]
 
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
 
[root@node1 mysql]# vi /etc/my.cnf
 
datadir=/usr/local/mysql/data/
 
修改完成后重新啟動MYSQL成功
 
[root@node1 mysql]# service mysql start
 
Starting MySQL.. SUCCESS!
  
(2) 報錯現象:
  
[root@node1 mysql]# /usr/local/mysql/bin/mysql -uroot
 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  
查看配置文件發現socket文件在/var/lib/mysql/mysql.sock,而不是在 /tmp/mysql.sock
 
[root@node1 mysql]# cat /etc/my.cnf
 
[mysqld]
 
datadir=/usr/local/mysql/data/
 
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
 
      解決方法:
設置軟鏈接
ln -s /var/lib/mysql/mysql.sock  /tmp/mysql.sock
  
或者,修改配置文件
 
注意一個問題,在生產環境,要注意時區問題
 
vi /etc/my.cnf
 
[mysqld]
 
default-time_zone = '+8:00'
 
使用北京時間的時區
  
生產環境還要注意連接數的設置(操作系統也要設置)
 
max_connections=3000

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉首市| 深泽县| 新绛县| 江城| 缙云县| 云阳县| 衡阳县| 拜城县| 徐汇区| 横山县| 芜湖市| 汕尾市| 禹城市| 桂阳县| 阜新| 崇左市| 兴文县| 陵川县| 南和县| 建昌县| 福海县| 万州区| 宝鸡市| 汝城县| 清徐县| 惠来县| 西贡区| 离岛区| 偃师市| 抚州市| 呼图壁县| 桂林市| 鄂托克前旗| 焦作市| 新化县| 雷波县| 开阳县| 南陵县| 阳曲县| 南雄市| 平定县|