mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制
[root@DB-S ~]# ll /usr/local/|grep mysql lrwxrwxrwx. 1 root root 21 Jun 14 01:52 mysql -> /alidata/server/mysql #这是脚本免编译的安装的环境(比较复杂)
[root@DB-S /]# tree /data/ /data/ ├── 3307 │ └── data └── 3308 └── data 4 directories, 0 files
[root@DB-S 3307]# find /data -type f -name mysql |xargs chmod 700
[root@DB-S scripts]# ls mysql_install_db [root@DB-S scripts]# pwd /alidata/server/mysql/scripts
[root@DB-S scripts]# ./mysql_install_db --basedir=/alidata/server/mysql --datadir=/data/3307/data --user=mysql [root@DB-S scripts]# ./mysql_install_db --basedir=/alidata/server/mysql --datadir=/data/3308/data --user=mysql
/usr/local/mysql/bin/mysqld: File '/data/3307/mysql-bin.index' not found (Errcode: 13) 160614 5:46:15 [ERROR] Aborting #没有权限 root@DB-S data]# chown -R mysql:mysql 330* [root@DB-S data]# ll total 8 drwxr-xr-x. 3 mysql mysql 4096 Jun 14 06:03 3307 drwxr-xr-x. 3 mysql mysql 4096 Jun 14 05:48 3308
[root@DB-S 3308]# ./mysql start + port=3308 + echo 3308 3308 + mysql_user=root + CmdPath=/usr/local/mysql/bin + mysql_sock=/data/3308/mysql.sock + case $1 in + function_start_mysql + '[' '!' -e /data/3308/mysql.sock ']' + printf 'Starting MySQL.....\n' Starting MySQL..... + /bin/bash /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf
[root@DB-S 3308]# netstat -lnutp|grep mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 16239/mysqld tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 24077/mysqld tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 24910/mysqld
[root@DB-S 3308]# mysql -uroot -p -S /data/3308/mysql.sock Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.40-log MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
关闭不同端口的数据库: [root@DB-S 3307]# ./mysql stop 3307 Stoping MySQL..... [root@DB-S 3307]# netstat -lnutp|grep mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 16239/mysqld
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[root@DB-S ~]# ls /data/330* /data/3307: data my.cnf mysql mysql_barry3307.err mysql-bin.000001 mysql-bin.index mysqld.pid mysql.sock slow.log /data/3308: data my.cnf mysql mysql_barry3308.err mysql-bin.000001 mysql-bin.index mysqld.pid mysql.sock slow.log #下面有脚本mysql的内容和my.cnf的内容
[root@DB-S ~]# cat /data/3307/my.cnf [client] port = 3307 [mysql] no-auto-rehash [mysqld] user = mysql port = 3307 basedir = /usr/local/mysql datadir = /data/3307/data socket = /data/3307/mysql.sock open_files_limit = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k #default_table_type = InnoDB thread_stack = 192K transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M long_query_time = 1 #log_long_format log-error = /data/3307/error.log log-slow-queries = /data/3307/slow.log pid-file = /data/3307/mysql.pid log-bin = /data/3307/mysql-bin relay-log = /data/3307/relay-bin relay-log-info-file = /data/3307/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M myisam_sort_buffer_size = 1M myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10G myisam_repair_threads = 1 myisam_recover lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 2 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/data/3307/mysql_barry3307.err pid-file=/data/3307/mysqld.pid
[root@DB-S ~]# cat /data/3307/mysql #!/bin/bash #mysql多实例启动脚本 #init port=3307 echo $port mysql_user="root" #mysql_pwd="" #注意密码 CmdPath="/usr/local/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql() { if [ ! -e "$mysql_sock" ];then printf "Starting MySQL.....\n" /bin/bash ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 >/dev/null& else printf "MySQL is running......\n" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped.... \n" exit else printf "Stoping MySQL.....\n" ${CmdPath}/mysqladmin -u ${mysql_user} -S /data/${port}/mysql.sock shutdown fi #如查有密码加 -p${mysql_pwd} } #restart function function_restart_mysql() { printf "Restarting MySQL......\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in "start") function_start_mysql ;; "stop") function_stop_mysql ;; "restart") function_restart_mysql ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac
端口3308同上,把3307换成3308就行了!
百度网盘(配好的配置文件):http://pan.baidu.com/s/1bo6MTGV
配置mysql多实例数据库开机自启动:
[root@DB-S 3308]# echo "/data/3307/mysql start" >>/etc/rc.local [root@DB-S 3308]# echo "/data/3308/mysql start" >>/etc/rc.local [root@DB-S 3308]# grep "330[7,8]" /etc/rc. rc.d/ rc.local rc.local.bak rc.sysinit [root@DB-S 3308]# grep "330[7,8]" /etc/rc.local /data/3307/mysql start /data/3308/mysql start
[root@DB-S ~]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /etc/init.d/mysqld start /etc/init.d/nginx start /etc/init.d/php-fpm start systemctl start vsftpd.service /data/3307/mysql start /data/3308/mysql start
为root增加密码:
[root@DB-S ~]# mysqladmin -S /data/3307/mysql.sock -uroot password"3307" mysqladmin: Unknown command: 'password3307' [root@DB-S ~]# mysqladmin -S /data/3307/mysql.sock -uroot password "3307" [root@DB-S ~]# mysql -S /data/3307/mysql.sock #这是无法这样登录 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) [root@DB-S ~]# mysql -S /data/3307/mysql.sock -uroot -p Enter password: #密码:3307 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.5.40-log MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
主从复制配置:
[root@DB-S ~]# grep 'server-id' /etc/my.cnf server-id = 1 #server-id = 2 [root@DB-S ~]# grep 'server-id' /data/3307/my.cnf server-id = 2 [root@DB-S ~]# sed -i 's/server-id.*/server-id = 3/g' /data/3308/my.cnf [root@DB-S ~]# grep 'server-id' /data/3308/my.cnf server-id = 3
创建用于同步的帐号:
[root@DB-S ~]# mysql -uroot -p mysql> grant replication slave on *.* to 'rep'@'%' identified by "3306"; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
锁表只读:
mysql> flush tables with read lock; Query OK, 0 rows affected (0.00 sec)
查看主库状态:
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000017 | 459 | | |#后面的从库复制时是从这个位置开始同步 +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
导出数据库数据:
[root@DB-S backup]# /alidata/server/mysql/bin/mysqldump -uroot -p3306 --all-databases|gzip >/server/backup/mysql_bak.`date +%F`.sql.gz -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
[root@DB-S ~]# ls /server/backup/mysql_bak.2016-06-14.sql.gz /server/backup/mysql_bak.2016-06-14.sql.gz
确保导库期间,数据库没有数据插入,可以再检查下主库状态信息
[root@DB-S ~]# mysql -uroot -p3306 -e "show master status" +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000017 | 459 | | | +------------------+----------+--------------+------------------+
导库后,解锁主库,恢复可写:
[root@DB-S ~]# mysql -uroot -p3306 -e "unlock tables;"
把主库备份的MySQL数据迁移到从库:
设置server-id值并关闭binlog设置
[root@DB-S ~]# egrep "log-bin|erver-id" /data/3307/my.cnf #log-bin = /data/3307/mysql-bin server-id = 2 [root@DB-S ~]# sed -i 's/\(log-bin.*\)/#\1/g' /data/3308/my.cnf [root@DB-S ~]# egrep "log-bin|erver-id" /data/3308/my.cnf #log-bin = /data/3308/mysql-bin server-id = 3 [root@DB-S ~]# service mysqld start Starting MySQL.. SUCCESS! [root@DB-S ~]# /data/3307/mysql start 3307 Starting MySQL..... [root@DB-S ~]# /data/3308/mysql start [root@DB-S ~]# netstat -lnutp |grep mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7526/mysqld tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 8342/mysqld tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 9155/mysqld
还原主数据库导出的数据备份:
[root@DB-S backup]# ls mysql_bak.2016-06-14.sql.gz [root@DB-S backup]# which gzip /bin/gzip [root@DB-S backup]# gzip -d mysql_bak.2016-06-14.sql.gz [root@DB-S backup]# ls mysql_bak.2016-06-14.sql
[root@DB-S backup]# mysql -uroot -p3307 -S /data/3307/mysql.sock <mysql_bak.2016-06-14.sql [root@DB-S backup]# mysql -uroot -p3308 -S /data/3308/mysql.sock <mysql_bak.2016-06-14.sql
登录从库配置同步参数:
[root@DB-S backup]# mysql -uroot -p3307 -S /data/3307/mysql.sock <<EOF > CHANGE MASTER TO > MASTER_HOST='192.168.1.99', > MASTER_PORT=3306, > MASTER_USER='rep', > MASTER_PASSWORD='3306', > MASTER_LOG_FILE='mysql-bin.000018', > MASTER_LOG_POS=107; > EOF
[root@DB-S backup]# mysql -uroot -S /data/3308/mysql.sock <<EOF CHANGE MASTER TO MASTER_HOST='192.168.1.99', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='3306', MASTER_LOG_FILE='mysql-bin.000018', MASTER_LOG_POS=107; EOF
启动从库同步开关:
[root@DB-S backup]# mysql -uroot -p'3307' -S /data/3307/mysql.sock -e "start slave;" [root@DB-S backup]# mysql -uroot -S /data/3308/mysql.sock -e "start slave;" [root@DB-S backup]# mysql -uroot -p3307 -S /data/3307/mysql.sock -e "show slave status\G;" *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.99 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000018 Read_Master_Log_Pos: 107 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000018 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql 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: 107 Relay_Log_Space: 403 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
[root@DB-S backup]# mysql -uroot -S /data/3308/mysql.sock -e "show slave status\G;"*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.99 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000018 Read_Master_Log_Pos: 107 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000018 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql 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: 107 Relay_Log_Space: 403 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
判断复制是否搭建成功就看如下IO和SQL两个线程是否显示为Yes状态
Slave_IO_Running:Yes 负责从库去主库读取Binlog日志,并写入从库的中继日志中
Slave_SQL_Runnint:Yes 负责读取并中继日志中Binlog,转换SQL语句后应用到数据库汇总
联系方式QQ:326528263 EMAIL:clnking@163.com 网名:bass 分享技术 突破难点 创新思维