[Mysql5.5编译安装]]
mysql5.5 Cmake编译参数
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -
DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -
DMYSQL_DATADIR=/opt/mysql/data -DWITH_DEBUG=0
-DDEFAULT_CHARSET=gbk -DDEFAULT_COLLATION=gbk_chinese_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -
DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1
CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
WITH_COMMENT:指定编译备注信息
WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
SYSCONFDIR:初始化参数文件目录
MYSQL_DATADIR:数据文件目录
MYSQL_TCP_PORT:服务端口号,默认3306
MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
make && make install
chown -R mysql:mysql /opt/mysql
scripts/mysql_install_db --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data 这里顺序很重要不然报错
cp support-files/my-medium.cnf /opt/mysql/my.cnf
cd /opt/mysql/support-files/
cp ./mysql.server /etc/init.d/mysql5
chmod 755 /etc/init.d/mysql5
chkconfig --levle 35 mysql5 on
在my.cnf的[mysqld]中添加 skip-name-resolve
service mysql5 start
[Mysql主从]
(主从分为标为AB)
1.修改A配置文件(my.cnf)
skip-name-resolve
skip-locking
log-bin=mysql-bin 启动二进制日志记录
binlog-do-db=test 设置需要记录bin-log的库
binlog-ignore-db=mysql 设置不需要bin-log的库
replicate-do-db=test 设置允许复制同步的库
replicate-ignore-db=mysql 设置不允许同步复制的库
server-id = 1 服务器ID 从主不能相同
slave-skip-errors=all
sync_binlog=0
2.启动A(启动前最好阻止外部连接到主库)并进入命令行
grant replication slave,file on *.* to 'repl'@'B地址' identified by 'pass'; 建立从库同步复制账号
flush privileges; 刷新使账号立即生效
flush tables with read lock; 全局读锁定
show master status; 记录bin-log文件名和log-post位移量
3.备份A
mysqldump -uroot -p --quick --single-transaction --master-data=1 --default-character-set=utf8 dbname > databases.sql #innodb
mysqldump -uroot -p --opt --default-character-set=utf8 dbname > databases.sql #myisam
unlocak tables; 备份完后可以解除锁定
4.B导入
mysqldump -uroot -p dbname < databases.sql
5.修改B配置文件(my.cnf)
skip-name-resolve
skip-locking
log-bin=mysql-bin 启动二进制日志记录
binlog-do-db=test 设置需要记录bin-log的库
binlog-ignore-db=mysql 设置不需要bin-log的库
replicate-do-db=test 设置允许复制同步的库
replicate-ignore-db=mysql 设置不允许同步复制的库
#log_slave_updates 从服务器写入relay-bin日志同时写到数据库的bin-log日志
server-id = 1 服务器ID 从主不能相同
slave-skip-errors=all
sync_binlog=0
6.用--skip-slave-start选项启动从服务器
CHANGE MASTER TO MASTER_HOST='A地址',\
MASTER_USER='repl', MASTER_PASSWORD='slavepass', \
MASTER_LOG_FILE='bin-log-name', \
MASTER_LOG_POS=log_post,MASTER_CONNECT_RETRY=30;
7.slave start 启动B
show slave status\G
show processlist;
8.测试同步复制
[Mysql互为主从]
在主从基础上进行(主从分为标为AB)
1.修改A配置文件(my.cnf)
log_slave_updates 服务器写入relay-bin日志同时写到数据库的bin-log日志
auto_increment_increment=2 #自增涨增量
auto_increment_offset=1 #初始起点值
2.修改B配置文件
auto_increment_increment=2 #自增涨增量
auto_increment_offset=1 #初始起点值
重启数据库
3.B(启动前最好阻止外部连接到B)并进入命令行
grant replication slave,file on *.* to 'rep2'@'A' identified by 'pass'; 建立同步复制账号
flush privileges; 刷新使账号立即生效
flush tables with read lock; 全局读锁定
show master status; 记录bin-log文件名和log-post位移量
4.用--skip-slave-start选项启动A服务器
service mysql5 stop
mysqld_safe --user=mysql --skip-slave-start&
5.设置同步信息
CHANGE MASTER TO MASTER_HOST='B地址',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='bin-log-name',
MASTER_LOG_POS=log_post,
MASTER_CONNECT_RETRY=30;
6.slave start 启动A
show slave status\G
show processlist;
[Mysql主从+半同步]
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
复制心跳(用户检测复制是否中断)
1.在主从基础上进行修改配置文件(A为主 B为从)
A:
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
B:
rpl_semi_sync_slave_enabled=1
2.或者
A:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 插件默认不安装,安装后下次启动自动加载
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000;
B:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
3.查看主从服务器状态
show status like "%rpl_semi%";
+--------------------------------------------+---------------+
| Variable_name | Value |
+--------------------------------------------+---------------+
| Rpl_semi_sync_master_clients | 1 |# 有多少个Semi-sync的备库
| Rpl_semi_sync_master_net_avg_wait_time | 732 |# 事务提交后,等待备库响应的平均时间
| Rpl_semi_sync_master_net_wait_time | 1042785285 |# 等待网络响应的总次数
| Rpl_semi_sync_master_net_waits | 1423323 |# 总的网络等待时间
| Rpl_semi_sync_master_no_times | 0 |# 一共有几次从Semi-sync跌回普通状态
| Rpl_semi_sync_master_no_tx | 0 |# 备库未及时响应的事务数
| Rpl_semi_sync_master_status | ON |# 主库上Semi-sync是否正常开启
| Rpl_semi_sync_master_timefunc_failures | 0 |# 时间函数未正常工作的次数
| Rpl_semi_sync_master_tx_avg_wait_time | 29059 |# 开启Semi-sync,事务返回需要等待的平均时间
| Rpl_semi_sync_master_tx_wait_time | 8164966680929 |# 事务等待备库响应的总时间
| Rpl_semi_sync_master_tx_waits | 280974820 |# 事务等待备库响应的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 5499398 |# 改变当前等待最小二进制日志的次数
| Rpl_semi_sync_master_wait_sessions | 230 |# 当前有几个线程在等备库响应
| Rpl_semi_sync_master_yes_tx | 16801244 |# Semi-sync模式下,成功的事务数
+--------------------------------------------+---------------+
[Mysql互为主从+半同步]
1.在互为主从基础上进行修改配置文件(A为主 B为从)
A:
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_timeout=1000
B:
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
2.或者
A:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_slave_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000;
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
B:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_slave_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000;
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
3.查看主从服务器状态
show status like "%rpl_semi%";