mysql5.7+主从不一致_Mysql5.7安装错误处理与主从同步及!
basedir=/iddbs/mysql-5.7.16
datadir=/iddbs/mysql5.7/data3306
一、自定義Mysql.5.7版本免編譯安裝:
1、Db-server1安裝前期準備
前期準備先確認是否已經安裝了Mysql,如果有rpm安裝會影響面編譯安裝:
具體方法如下:
確保是否有已經rpm安裝了Mysql:
[root@bogon?tool]#rpm -qa | grep mysql
mysql-community-libs-5.7.16-1.el6.x86_64
mysql-community-server-5.7.16-1.el6.x86_64
mysql-community-common-5.7.16-1.el6.x86_64
mysql-community-client-5.7.16-1.el6.x86_64
如果有rpm包刪除:
例如:
rpm -e mysql-community-libs-5.7.16-1.el6.x86_64 mysql-community-server-5.7.16-1.el6.x86_64 mysql-community-client-5.7.16-1.el6.x86_64 mysql-community-common-5.7.16-1.el6.x86_64 --nodeps
2、創建軟件安裝目錄:
[root@bogon?tool]# mkdir -p /iddbs/
將面編譯安裝軟件包下載或者拷貝至/iddbs/下
[root@bogon iddbs]# ls
mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@bogon iddbs]# tar -zxf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@bogon iddbs]# ls
mysql-5.7.16-linux-glibc2.5-x86_64 ??mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
將減壓目錄命名為:
[root@bogon?iddbs]# mv mysql-5.7.16-linux-glibc2.5-x86_64?/iddbs/mysql-5.7.16
創建用戶:
[root@bogon?iddbs]# useradd -s /sbin/nologin -M iddbs
授權給iddbs用戶:
[root@bogon?iddbs]# chown -R iddbs.iddbs?/iddbs/
3、做軟鏈接可以不做如果做了軟鏈接?basedir=/iddbs/mysql以下所有的相關聯的basedir必須是basedir=/iddbs/mysql
[root@bogon?iddbs]# cd /iddbs/
[root@bogon?iddbs]# ls
mysql-5.7.16 ??mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@bogon?iddbs]# ln -s mysql-5.7.16?/ /iddbs/mysql
4、創建數據文件:
[root@bogon?iddbs# mkdir -p /iddbs/mysql5.7/data3306
5、初始化數據庫:
[root@bogon bin]# pwd
/iddbs/mysql-5.7.16/bin
[root@bogon?bin]#
執行命令mysql_install_db?--basedir=/iddbs/mysql-5.7.16 --datadir=/iddbs/mysql5.7/data3306?--user=iddbs
初始化錯誤:
2017-06-10 01:31:22 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2017-06-10 01:31:22 [ERROR] ??The data directory '/iddbs/mysql5.7/data3306' already exist and is not empty.
需使用以下命令:
mysqld --initialize --user=iddbs --basedir=/iddbs/mysql-5.7.16 --datadir=/iddbsdata/mysql5.7/data3306
在執行安裝時必須確保數據目錄下為空及(/iddbsdata/mysql5.7/data3306下不含任何文件)否則報錯
6、啟動數據庫常見錯誤及處理方法:
[root@bogon?mysql]# cp support-files/mysql.server /etc/init.d/mysqld ??#將啟動文件拷貝至/etc/init.d目錄下以可以使用init.d啟動
cp: overwrite `/etc/init.d/mysqld'? y
[root@bogon?mysql]# cp support-files/my-default.cnf /etc/my.cnf ?#將配置文件拷貝到/etc下且名字為my.cnf
[root@bogon?mysql]# cat /etc/my.cnf
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
port=3306
user=iddbs
password ='newpassword'
socket=/iddbs/mysql5.7/data3306/mysql.sock
[mysqld]
max_connections=1000
max_user_connections=500
wait_timeout=200
user=iddbs
server-id=5
port=3306
basedir=/iddbs/mysql5.7
datadir=/iddbs/mysql5.7/data3306
socket=/iddbs/mysql5.7/data3306/mysql.sock
pid-file=/iddbs/mysql5.7/data3306/mysql.pid
log-bin=/iddbs/mysql5.7/data3306/mysql-bin
relay-log=/iddbs/mysql5.7/data3306/relay-bin
log-error=/iddbs/mysql5.7/data3306/mysql-error.log
interactive_timeout=172800
wait_timeout=172800
max_allowed_packet=16M
expire_logs_days=7
auto-increment-increment=2
auto-increment-offset=1
character-set-server=utf8
collation_server=utf8_general_ci
innodb_data_file_path=ibdata1:1G:autoextend
innodb-buffer-pool-size=15G
binlog_format=row
relay_log_recovery=1
log_bin_trust_function_creators=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
lower_case_table_names = 1
character_set_server = utf8
event_scheduler = on
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set = utf8
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
啟動報錯:
[root@bogon?mysql]# /etc/init.d/mysqld start
/etc/init.d/mysqld: line 276: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
解決方法修改mysql啟動文件文件目錄路徑:
[root@bogon?mysql]# vim /etc/init.d/mysqld
if test -z "$basedir"
then
basedir=/iddbs/mysql-5.7.16
bindir=/iddbs/mysql-5.7.16/bin
if test -z "$datadir"
then
datadir=/iddbs/mysql5.7/data3306
fi
sbindir=/iddbs/mysql-5.7.16/bin
libexecdir=/iddbs/mysql-5.7.16/bin
else
bindir="$basedir/bin"
報錯退出再次啟動:
[root@bogon?mysql]# /etc/init.d/mysqld start
啟動報錯:
Starting MySQL ERROR! Couldn't find MySQL server (/iddbs/mysql5.7/bin/mysqld_safe)
為什么會出現上述情況,由于/etc/init.d/mysqld 啟動時指定了/iddbs/mysql5.7/data3306數據文件,但在/iddbs/mysql5.7/下是不含bin的;真正的bin文件在/iddbs/mysql-5.7.16/bin下,因此可做軟鏈接:
ln -s /iddbs/mysql-5.7.16/bin ?/iddbs/mysql5.7/bin
再次啟動:
[root@bogon?mysql]# /etc/init.d/mysqld start
Starting MySQL.... SUCCESS!
啟動服務/etc/init.d/mysqld 可使用參數
[root@bogon data3306]# /etc/init.d/mysqld
Usage: mysqld ?{start|stop|restart|reload|force-reload|status}
含啟動、停止、重啟、強制重啟、狀態
7、查看進程:
[root@bogon?mysql]# lsof -i:3306
COMMAND ?PID ?USER ??FD ??TYPE DEVICE SIZE/OFF NODE NAME
mysqld ?4098 mysql ??10u ?IPv4 ?32707 ?????0t0 ?TCP *:mysql (LISTEN)
[root@bogon support-files]# ps -ef | grep mysql| grep -v grep
root ?????1978 ????1 ?0 Jun09 pts/1 ???00:00:00 /bin/sh /iddbs/mysql5.7/bin/mysqld_safe --datadir=/iddbs/mysql5.7/data3306 --pid-file=/iddbs/mysql5.7/data3306/mysql.pid
iddbs ????2445 ?1978 ?0 Jun09 pts/1 ???00:00:27 /usr/local/mysql/bin/mysqld --basedir=/iddbs/mysql5.7 --datadir=/iddbs/mysql5.7/data3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=iddbs --log-error=/iddbs/mysql5.7/data3306/mysql-error.log --pid-file=/iddbs/mysql5.7/data3306/mysql.pid --socket=/iddbs/mysql5.7/data3306/mysql.sock --port=3306
至此mysql5.7安裝完成;
二、登錄mysql:
[root@bogon bin]# mysql -uroot -p
Enter password:
提示需要輸入密碼;Mysql5.7登錄密碼隱藏在錯誤日志內:
[root@bogon bin]# cd /iddbs/mysql5.7//data3306/
[root@bogon data3306]# ls
auto.cnf ???????ib_logfile0 ?mysql ????????????mysql-bin.000003 ?mysql-bin.index ?mysql.pid ???????performance_schema
ib_buffer_pool ?ib_logfile1 ?mysql-bin.000001 ?mysql-bin.000004 ?mysqld_safe.pid ?mysql.sock ??????sys
ibdata1 ????????ibtmp1 ??????mysql-bin.000002 ?mysql-bin.000005 ?mysql-error.log ?mysql.sock.lock
[root@bogon data3306]# grep password mysql-error.log
2017-06-09T13:18:12.551595Z 1 [Note] A temporary password is generated for root@localhost: &DFbeiVDs3ja ??#此為此次安裝密碼自動生成,每次安裝不一樣
[root@bogon data3306]# mysql -uroot -p’&DFbeiVDs3ja ’
登錄以后發現不能進行任何操作:
mysql>
解決方法:
mysql> set ?password=password(‘newpassword’);
mysql> flush privileges;
創建iddbs用戶及登錄:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'iddbs'@'localhost' identified by 'newpassword';
mysql> flush privileges;
mysql> quit
使用iddbs用戶登錄:
[root@bogon data3306]# mysql -uiddbs?-p’newpassword ’
注意可能有報錯:
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Unknown error 1045
因為5.7基于安全考慮在命令行輸入密碼是不安全的所有禁止登錄;可使用
[root@bogon data3306]# mysql -uiddbs -p
Enter password: password
mysql>
mysql> show databases;
+--------------------+
| Database ??????????|
+--------------------+
| information_schema |
| mysql ?????????????|
| performance_schema |
| sys ???????????????|
+--------------------+
4 rows in set (0.11 sec)
三、db-server2安裝
重復db-server1安裝過程
四、Mysql主從同步
Mysql部署模式有:一主一從主從同步、一主多從、雙主互為主從、雙主多從、多主多從環狀級聯
此次部署采用雙主互為主從模式:
主從復制:
a)?主從復制原理:
主從復制是由于master端binlog記錄了所有操作。利用binlog實現同步
Mysql主從復制是一個異步的復制過程(但在一般情況下感覺是實施同步的),數據庫數據從一個Mysql數據庫(主庫master)復制到另一個Mysql數據庫(從庫slave)。在master與slave之間實現整個主從復制的過程是由三個線程參與完成的。其中兩個線程(SQL線程和IO線程)在slave端,另外一個線程(IO線程)在master端。
要是先Mysql的主從復制,首先必須打開master端的binlog(mysql-bin.XXXXXX)功能。否則無法實現主從復制。因為整個復制過程實際上就是slave從master端獲取binlog日志,然后在slave自身上以相同的順序執行獲取的binlog日志中所記錄的各種操作。
b)?主從復制的應用:
主從服務器互為備份,主從設置可以加強數據架構的健壯性,當主出問題時,可以人工或者自動切換到從服務器上繼續提供服務。
主從服務器可實現讀寫分離分擔網站壓力。
c)?主從復制具體操作:
主庫(master)配置文件my.cnf開啟log-bin
server-id ??????= 1
# Uncomment the following if you want to log updates
log-bin=/application/mysql/mysql-bin
可以在數據庫中查看:
mysql> show variables like 'log%'; ?#查看主庫的binlog開關是否生效(ON狀態)
+---------------------------------+---------------------------------------------+
| Variable_name ????| Value ??????????????????????????????????????|
+---------------------------------+---------------------------------------------+
| log ??????????????| OFF ???????????????????????????????????????|
| log_bin ??????????| ON ????????????????????????????????????????|
建立主從數據賬號
mysql> grant replication slave?on *.* to 'rep'@'172.22.2.%' identified by 'xuxuedong'; ????replication slave為同步權限。
Query OK, 0 rows affected (0.00 sec)
主庫授權賬號解決從庫連接主庫的問題。
鎖表數據保證同步數據一致性,
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
查看binlog節點位置。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File ????????????| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | ?????259 |??????????????| ?????????????????|
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
從庫獲取主庫節點信息:
如果是主從單復制,從庫可以不開啟binlog
有兩種情況從庫必須打開binlog:
1)級聯同步:A->B->C那么B必須開啟binlog
2)從庫做數據備份,數據庫備份必須要有全備和binlog日志
[root@CentOS ~]# mysqldump -uroot -pxuxuedong -B -A --events -S /data/3306/mysql.sock ?> /opt/new.mysql
[root@CentOS ~]# ls /opt/
new.mysql ?rh
解鎖主庫:
mysql> unlock tables ;
Query OK, 0 rows affected (0.00 sec)
數據導入從庫
[root@CentOS ~]# mysql -uroot -pxuxuedong ??-S /data/3306/mysql.sock ?< /opt/new.mysql
[root@CentOS 3306]# cat | mysql -uroot -pxuxuedong -S /data/3306/mysql.sock <
CHANGE MASTER TO
MASTER_HOST='172.22.2.237',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='xuxuedong',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=259;
EOF
[root@CentOS 3306]# ls /data/3306/data/master.info
/data/3306/data/master.info
上述操作實際是將用戶密碼等信息寫入從庫的master.info中。
從庫開始同步:
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G ?#查看同步。
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.22.2.223
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 370
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 363
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 370
Relay_Log_Space: 519
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
完成以上主從同步已經實現。
總結主從復制的步驟:
1、需要兩臺數據庫。
2、配置my.cnf文件,主庫配置log-bin和server-id參數,從庫配置server-id且不能和主庫以及其他從庫一樣;從庫一般不開啟log-bin功能。配置后重啟服務生效。
3、登錄主庫增加用于連接主庫同步的賬號:如rep并授權replication slave同步權限。
4、登錄主庫,證庫鎖表“flush tables with read lock;”(窗口不能關閉,窗口關閉及失效。)然后show ?master status查看binlog的位置狀態。
5、新開窗口,備份或導出原有的數據庫,并拷貝到從庫所在的服務器目錄。如果數據量很大,并且允許停機,可停機打包,而不用mysqldump.
6、J解鎖主庫:unlock tables;
7、把主庫導出的原有的數據恢復到從庫。
8、根據主庫的show master status 查看binlog的位置狀態,在從庫執行change master語句。
9、從庫開啟同步開關,start slave。
10、從庫show slave status \G;查看同步狀態,并在主庫進行更行測試。
d)?忽略權限庫同步:
1、主庫下忽略mysql庫及information-schema庫的主從同步。及上文提及的不想同步的數據庫在主庫添加:
binlog-ignore-db=mysql
binlog-ignore-db=information-schema
2、從庫下可以忽略mysql同步:及replicate-ignore-db=mysql從庫主庫必須同時使用
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的mysql5.7+主从不一致_Mysql5.7安装错误处理与主从同步及!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 回滚段 表空间_oracle
- 下一篇: mysql创建数据库时候同时创建表空间_