MySQL 5.7安裝部署總結
之前搭建MySQL環境都是使用公司內部使用的指令碼,其實說實話遮蔽了很多細節,對MySQL的安裝還是瞭解比較膚淺,今天有個MySQL
5.7的資料遷移的任務,也是為了熟悉安裝過程就走了一遍安裝的流程,整體和5.6差別不大,這裡演示安裝的都是Percona釋出的二進位制版本,和MySQL官方的是完全相容,當然也揉入了Percona一些自己的東西。
首先就是安裝路徑和資料路徑分離,這一點尤其重要。當然不是MySQL 5.7中開始,之前安裝的時候,雖然最後也能成功,但是這一塊就比較亂。
二進位制包是以.tar.gz這樣的檔案,可以自行下載,假設我們解壓後方到了mysql5.7這個目錄下,我們把它放到/usr/local下,這個才是大本營。# mv /tmp/mysql5.7 /usr/local/mysql# mv /tmp/mysql5.7 /usr/local/mysql
然後根據需要建立相應的資料目錄。
#mkdir -p /home/mysql
這裡我們指定兩個變數basedir指向安裝目錄,datadir指向資料目錄
basedir=/usr/local/mysql
datadir=/home/mysql
初始化系統環境,比如建立使用者,組之類的。
chattr -i /etc/shadow /etc/group /etc/gshadow /etc/passwd
/usr/sbin/groupadd mysql
/usr/sbin/useradd mysql -g mysql -d /home/mysql -s /sbin/nologin
chattr +i /etc/shadow /etc/group /etc/gshadow /etc/passwd
這個就是老套路了。
然後從support-files裡面複製啟動指令碼,放到自啟動設定中
cp -rf $basedir/support-files/mysql.server /etc/init.d/mysql
而下面的設定就是建立一些軟連線,是的/usr/bin中可以正常訪問mysql的幾個常用命令列工具。
chown -R mysql:mysql $basedir $datadir
ln -f -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -f -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump
ln -f -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin
ln -f -s /usr/local/mysql/bin/mysqlshow /usr/bin/mysqlshow
ln -f -s /usr/local/mysql/bin/mysqld /usr/bin/mysqld
設定MySQL自啟動
/sbin/chkconfig --add mysql
/sbin/chkconfig --level 2345 mysql on
其實看看這些步驟,其實如果全是手動檔,其實也可以,這樣就是為了方便,統一管理。
然後我們來做幾件事情,先來設定引數檔案,可以從support-files裡面複製一個模板,在這個基礎上改進,或者基於現有的專案的模板也可以。
cp $basedir/support-files/my.cnf.nor /etc/my.cnf
這個地方還是需要設定字符集:
客戶端
default-character-set=utf8
伺服器端
character-set-server = utf8
完成之後,這個時候先不要急著service mysql start,肯定會有下面的問題。
# service mysql start
Starting MySQL (Percona Server)........ ERROR! The server quit without updating PID file (/var/lib/mysql/teststd.cyou.com.pid).
而檢視錯誤日誌就會看到很明顯的問題:2016-11-09T14:15:01.952812+08:00 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2016-11-09T14:15:01.952883+08:00 0 [ERROR] Aborting
我們需要初始化資料字典,這裡就需要注意一點,如果使用如下的命令會提示已經過期了。
mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql
推薦的方式是:
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql
這個操作比較沒有任何日誌提示就成功了。
再次嘗試就沒有問題了。
[root@teststd bin]# service mysql start
Starting MySQL (Percona Server)...... SUCCESS!
而接下來的事情也需要格外注意,那就是MySQL 5.7中的秘密設定,它基於安全的考慮,會設定一個預設的密碼。
直接登入是會報錯的。
[root@teststd bin]# mysql
Logging to file '/home/mysql/query.log'
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
怎麼檢視預設密碼呢,可以在啟動的日誌裡面,我是在error.log裡面看到的。
[root@teststd mysql]# grep password *.log
error.log:2016-11-09T14:28:51.344922+08:00 1 [Note] A temporary password is generated for root@localhost: aUpmj1zs8M%p
error.log:2016-11-09T14:29:39.745255+08:00 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
query.log:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
按照提示輸入密碼,就可以成功登入了。
[root@teststd mysql]# mysql -u root -p
Logging to file '/home/mysql/query.log'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
不過需要馬上修改密碼,要不什麼命令都執行不了,會一直提示你修改密碼。
> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改密碼
> set password=password('mysql');
Query OK, 0 rows affected, 1 warning (0.01 sec)
整個過程就順利完成了,後面想繼續修改密碼,有幾種寫法,大同小異。
update user set authentication_string=PASSWORD('mysql') where User='root';
接下來就是搭建從庫了,不搭建從庫這個環境就是不完整的。
新版本的主庫已經啟用了GTID
> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 646
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: c6d66211-a645-11e6-a2b6-782bcb472f63:1-135
1 row in set (0.00 sec)
開了binlog,比如下面的幾個引數:
| log_bin | ON
| log_bin_basename | /home/mysql/mysql-bin
| log_bin_index | /home/mysql/mysql-bin.index
| binlog_format | ROW
還有一個重要的設定就是server-id
[root@testdb2 ~]# mysqladmin var|grep server_id
| server_id | 20
這裡簡單提一下,server-id的格式比較單一,不能有其它的字元,比如 , _ -這樣的字元,否則啟動的時候會有報錯。
2016-11-09T06:48:16.918807Z 0 [ERROR] Unknown suffix '_' used for variable 'server_id' (value '130_58')
2016-11-09T06:48:16.918934Z 0 [ERROR] /usr/local/mysql/bin/mysqld: Error while setting value '130_58' to 'server_id'
2016-11-09T06:48:16.918981Z 0 [ERROR] Aborting
不少大公司在這方面還是有一些的規範的。
假設我就設定簡單一些,按照IP末尾來設定server-id
# mysqladmin var|grep server_id
| server_id | 58
有個細節說一下,還是server-id,
在引數檔案/etc/my.cnf裡面是:
server-id = 58但是檢視引數設定可以看到是server_id,一個是橫線,一個是下劃線
[root@teststd mysql]# mysqladmin var|grep server_id
| server_id | 58
我們在主庫全庫匯出:
主庫:
[root@testdb2 ~]# mysqldump -f -hlocalhost -uroot
--default-character-set=utf8 --single-transaction -R --triggers -q
--all-databases |gzip> master.dmp.gz
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
從庫應用可能會有這樣的錯誤。
# mysql < master.dmp
Logging to file '/home/mysql/query.log'
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
很簡單,我們這是一個從庫,show master應該不會有GTID的資訊
> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000005
Position: 194
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: c6d66211-a645-11e6-a2b6-782bcb472f63:1-135
1 row in set (0.00 sec)
在從庫做一個reset操作即可。
> reset master;
Query OK, 0 rows affected (0.02 sec)
再次檢視,從庫上show master就沒有GTID的干擾了.
> show master status\G
*************************** 1. row *************************** File: mysql-bin.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 直接應用資料即可。
[root@teststd tmp]# mysql < master.dmp
Logging to file '/home/mysql/query.log'
主庫的配置一個同步使用者:
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl12345';
從庫使用GTID的方式自動應用
CHANGE MASTER TO
MASTER_HOST='10.127.128.99',
MASTER_USER='repl',
MASTER_PASSWORD='repl12345',
MASTER_PORT=3306,
MASTER_AUTO_POSITION = 1;
然後啟動從庫的日誌應用即可。
> start slave;
Query OK, 0 rows affected (0.01 sec)
slave就這樣搭建好了,簡單的驗證就是使用show slave status了。
> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.127.128.99
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 142343798
Relay_Log_File: teststd-relay-bin.000002
Relay_Log_Pos: 717
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Exec_Master_Log_Pos: 142343798
Relay_Log_Space: 926
...
Seconds_Behind_Master: 0
...
Master_Server_Id: 20
Master_UUID: 8fc8d9ac-a62b-11e6-a3ee-a4badb1b4a00
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
...
Retrieved_Gtid_Set: 8fc8d9ac-a62b-11e6-a3ee-a4badb1b4a00:1090
Executed_Gtid_Set: 8fc8d9ac-a62b-11e6-a3ee-a4badb1b4a00:1-1090
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2128200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql5.7GeleraCluster安裝部署(二)MySql
- Docker 安裝 Mysql 5.7DockerMySql
- MySQL5.7原始碼安裝問題彙總MySql原始碼
- CentOS 7 - 安裝MySQL 5.7CentOSMySql
- CentOS 7 安裝 MySQL 5.7CentOSMySql
- mysql5.7 安裝教程MySql
- mysql 5.7 多例項安裝MySql
- centos安裝mysql5.7CentOSMySql
- Capistrano + SVN 個人安裝部署總結API
- RabbitMQ 安裝部署與配置總結MQ
- Centos7安裝Mysql5.7方法總結 - 實操手冊CentOSMySql
- Docker 部署 MySQL 5.7DockerMySql
- Windows安裝MySQL5.7教程WindowsMySql
- Linux下安裝MySQL 5.7LinuxMySql
- Linux 7 安裝Mysql 5.7LinuxMySql
- CentOS 6.5/6.6 安裝mysql 5.7CentOSMySql
- 用OneinStack安裝mysql 5.7MySql
- mysql 5.7單例項安裝MySql單例
- MySQL:mysql5.7解壓版安裝與解除安裝MySql
- debian-mysql5.7安裝與解除安裝MySql
- Mysql 5.7 免安裝版windows安裝完整教程MySqlWindows
- mysql5.7GroupReplication多主模式在Centos7.2上安裝部署MySql模式CentOS
- CentOS7.3 安裝 MySQL5.7CentOSMySql
- Ubuntu 18.04 安裝配置 MySQL 5.7UbuntuMySql
- CentOS7 安裝mysql5.7CentOSMySql
- mysql5.7tar包的安裝MySql
- macOS Mojave 降級安裝 MySQL 5.7MacMySql
- MySQL5.7綠色版安裝MySql
- 如何在debain上安裝mysql 5.7AIMySql
- mysql5.7安裝_centos7MySqlCentOS
- ubuntu16 安裝mysql5.7UbuntuMySql
- windows安裝及配置mysql5.7WindowsMySql
- Ubuntu 16.04 上安裝 MySQL 5.7UbuntuMySql
- windows同時安裝 5.7 8.0 mysqlWindowsMySql
- [Mysql] 1.Mysql 5.7 綠色安裝(windows)MySqlWindows
- mysql proxy 安裝部署MySql
- mysql總結(二)--Windows下安裝教程MySqlWindows
- centos7.2 mysql5.7安裝教程CentOSMySql